जब भी JVM सोचता है कि यह चलने योग्य है तो VisualVM CPU समय का उपयोग करने के रूप में थ्रेड की गणना करता है। इसका मतलब यह है कि कोई भी थ्रेड जो लॉक पर प्रतीक्षा नहीं कर रहा है, उसे कम या ज्यादा रन करने योग्य माना जाता है, जिसमें कर्नेल में I/O की प्रतीक्षा करने वाले थ्रेड भी शामिल हैं! यहीं पर com.myql.jdbc.utils.ReadAheadInputStream.fill()
में बड़ी मात्रा में CPU उपयोग होता है। से आ रहा है। इसलिए CPU समस्या के बजाय आपको I/O समस्या है।
कुछ चीजें हैं जो आप JVM पक्ष पर कर सकते हैं, लेकिन बहुत सरल अनुकूलन नहीं:
- कनेक्शन पूल आकार में बदलाव करें। 1,000 समवर्ती क्वेरी बहुत है . जब तक आपका MySQL इंस्टेंस वास्तव में बड़े पैमाने पर नहीं होता है, तब तक लोड के उस स्तर को संभालने में परेशानी होगी, और प्रश्नों के बीच स्विच करने में काफी समय लगेगा। पूल के आकार को 250 या 50 तक छोड़ने का प्रयास करें, और वहां बेंचमार्क करें।
- कम या छोटी क्वेरी करें. यदि आपका ऐप छोटा है तो यह स्पष्ट रूप से स्पष्ट हो सकता है कि प्रत्येक क्वेरी से प्रत्येक पंक्ति आवश्यक है, लेकिन हो सकता है कि आपका ऐप उससे बड़ा हो। क्या अलग-अलग स्थान एक ही डेटा को क्वेरी करते हैं, या क्या दो अलग-अलग प्रश्नों को एक में जोड़ा जा सकता है जो दोनों को संतुष्ट करेगा?