2009-08-15 25 views
157

हाल ही में मेरा सर्वर सीपीयू बहुत अधिक जा रहा है।MySQL उच्च CPU उपयोग

सीपीयू लोड औसत 13.91 (1 मिनट) 11.72 (5 मिनट) 8.01 (15 मिनट) और मेरी साइट पर यातायात में मामूली वृद्धि हुई है।

शीर्ष आदेश चलाने के बाद, मैंने देखा कि MySQL 160% CPU का उपयोग कर रहा था!

हाल ही में मैं टेबल अनुकूलित कर रहा हूं और मैंने लगातार कनेक्शन पर स्विच किया है। क्या यह MySQL को उच्च मात्रा में CPU का उपयोग करने का कारण बन सकता है?

+4

लगातार कनेक्शन _almost_ हमेशा उपयोग करने के लिए सही चीज़ नहीं हैं। – jason

+0

मैं उन्हें अभी ले जाऊंगा और एक अंतर के लिए देखूंगा क्योंकि मुझे कभी भी एक महीने पहले 2 से ऊपर होने वाले सीपीयू को याद नहीं आया! – Juddling

+2

सर्वरों में एक से अधिक कोर होते हैं। प्रतिशत सीपीयू उपयोग की गणना एक कोर के सापेक्ष की जाती है, एक और शब्द दो कोरों का उपयोग करने वाली प्रक्रिया में 200% का सीपीयू उपयोग होगा। यहां, MySQL एक कोर का 100% और दूसरे कोर का 60% उपयोग कर रहा है। इसका मतलब यह नहीं है कि सभी सीपीयू का उपयोग किया जाता है, अधिकतर संभावना है कि उसके पास अभी भी कम से कम दो मुफ्त CPU हैं। – xaav

उत्तर

211

सबसे पहले मैं तुम्हें कहेंगे शायद चाहते हैं की जाँच के लायक है लगातार कनेक्शन बंद करने के लिए क्योंकि वे हमेशा अच्छे से ज्यादा नुकसान करते हैं।

दूसरा, मैं कहूंगा कि आप अपने MySQL उपयोगकर्ताओं को दोबारा जांचना चाहते हैं, बस यह सुनिश्चित करने के लिए कि किसी के लिए रिमोट सर्वर से कनेक्ट होना संभव नहीं है। यह जांचने के लिए भी एक प्रमुख सुरक्षा बात है।

तीसरा मैं कहूंगा कि आप MySQL Slow Query चालू करना चाहते हैं, जो लंबे समय तक ले रहे किसी भी प्रश्न पर नजर रखने के लिए लॉग इन करें और यह सुनिश्चित करने के लिए कि आपके पास भी महत्वपूर्ण तालिकाओं को लॉक करने के लिए कोई प्रश्न नहीं है लंबा।

कुछ अन्य चीजें आप जाँच कर सकते हैं निम्न क्वेरी को चलाने के लिए, जबकि सीपीयू लोड अधिक है होगा:

SHOW PROCESSLIST; 

यह आपको किसी भी प्रश्न वर्तमान में चल रहे या कतार में कर रहे हैं कि चलाने के लिए दिखाई देगा, क्या क्वेरी है और यह क्या कर रहा है (यह आदेश क्वेरी को छोटा कर देगा यदि यह बहुत लंबा है, तो आप पूर्ण क्वेरी टेक्स्ट देखने के लिए पूर्ण पूर्ण प्रक्रिया का उपयोग कर सकते हैं)।

तुम भी (आप InnoDB तालिकाओं का उपयोग कर रहे हैं) इन स्मृति आवंटन के सभी के रूप में एक क्वेरी प्रदर्शन पर प्रभावित करते हैं जो पैदा कर सकता है हो सकता है अपने बफ़र आकार, table cache, query cache और innodb_buffer_pool_size जैसी चीजों पर नज़र रखने के लिए चाहता हूँ सीएसओ खाने के लिए MySQL।

आप शायद कुछ पढ़ना चाहेंगे क्योंकि उनमें कुछ अच्छी जानकारी है।

यह भी एक बहुत अच्छा विचार एक प्रोफाइलर उपयोग करने के लिए है। जब आप चाहें तो कुछ चालू हो सकता है जो आपको दिखाएगा कि आपके आवेदन क्या चल रहे हैं, यदि डुप्लिकेट प्रश्न हैं, वे कितने समय ले रहे हैं, इत्यादि। इस तरह का कुछ उदाहरण है जिसे मैं कॉल कर रहा हूं PHP Profiler लेकिन वहां बहुत से लोग हैं। यदि आप ड्रूपल, जूमला या वर्डप्रेस जैसे सॉफ़्टवेयर का एक टुकड़ा उपयोग कर रहे हैं तो आप समुदाय के भीतर पूछना चाहेंगे क्योंकि उनके लिए संभवतः मॉड्यूल उपलब्ध हैं जो आपको कुछ भी मैन्युअल रूप से एकीकृत करने की आवश्यकता के बिना यह जानकारी प्राप्त करने की अनुमति देता है।

+10

इसके लिए बहुत बहुत धन्यवाद, मैंने लगातार कनेक्शन हटा दिए और फिर धीमी क्वेरी लॉग सेट अप की। मैंने लॉग पढ़ा और अधिकांश प्रश्न दो टेबल से आए और टेबल को ठीक से अनुक्रमित नहीं किया गया था! यह केवल लगभग 10 मिनट हो गया है, लेकिन यहाँ परिणाम है: सीपीयू लोड औसत 0.48 (1 मिनट) 0.95 (5 मिनट) 2.42 (15 मिनट) बहुत बहुत धन्यवाद – Juddling

+0

एक ही समस्या, टेबल कि धीमी गति से नीचे का अनुक्रमण द्वारा हल प्रक्रिया, धन्यवाद स्टीवन और जुडलिंग – gabrielem

+0

@ जुडलिंग क्या आप विस्तार से तालिका को इंडेक्स करने के बारे में बता सकते हैं? शायद कुछ लिंक? मुझे पता है कि यह थोड़ी देर हो गया है, लेकिन मैं इस बात के लिए वास्तव में नया हूं। क्षमा करें fr noobish प्रश्न – JayVDiyk

21

तो इस सर्वर बाहर की दुनिया को दिखाई देता है, यह अगर यह बाहर की दुनिया से कनेक्ट करने के लिए अनुरोध के बहुत सारे होने है (यानी लोग इसे में तोड़ने की कोशिश कर)

+0

यह सुनिश्चित नहीं है कि यह एक अज्ञात डाउनवोट को क्यों आकर्षित करता है, क्योंकि यह कुछ प्रणालियों के लिए अतीत में एक कारण रहा है। –

+0

मुझे लगता है कि नीचे वोट इसलिए है क्योंकि बाहरी दुनिया में MySQL दृश्यमान होना एक अच्छा विचार नहीं है। – MikeKulls

+6

@ माइककुल्स नहीं, यह एक अच्छा विचार नहीं है, क्योंकि यह बहुत से लोगों को प्रवेश करने और प्रवेश प्राप्त करने के लिए एक लक्ष्य के रूप में कार्य करेगा, जो एक उच्च CPU लोड देगा - इसलिए मेरा उत्तर एक संभावित कारण के रूप में होगा। –

157

इस शीर्ष पद अगर आप MySQL उच्च CPU उपयोग या लोड के लिए गूगल है, मैं एक अतिरिक्त जवाब जोड़ देंगे:

जुलाई 2012 1 पर, एक छलांग दूसरा वर्तमान UTC- में जोड़ा गया था ज्वारों के कारण पृथ्वी की धीमी गति से घूर्णन की क्षतिपूर्ति करने का समय।एनटीपी (या एनटीपीडी) चलाते समय यह सेकंड आपके कंप्यूटर/सर्वर की घड़ी में जोड़ा गया था। MySQLd कुछ ओएसई पर इस अतिरिक्त दूसरे को पसंद नहीं करता है, और एक उच्च CPU लोड उत्पन्न करता है। त्वरित फिक्स (रूट के रूप में):

$ /etc/init.d/ntpd stop 
$ date -s "`date`" 
$ /etc/init.d/ntpd start 
+20

चूंकि मूल पोस्ट लगभग 3 साल पहले था, मुझे संदेह है कि यह मूल पोस्टर की समस्या का कारण है। लेकिन यह मेरी समस्या का कारण था, और अभी मुझे बचाया - तो धन्यवाद! अधिक जानकारी: http://blog.mozilla.org/it/2012/06/30/mysql-and-the-leap-second-high-cpu-and-the-fix/ –

+5

उबंटू पर मेरे लिए वही समस्या और समाधान 12.04। थोड़ा अलग हल करने के लिए कदम: सेवा एनटीपी स्टॉप और& date-s "' date' "&& सेवा ntp MySQL CPU उपयोग तुरंत 50 से 100% नीचे 0 - 1% –

+0

yup से निकला जो अमेज़ॅन के ईसी 2 लिनक्स एएमआई पर हुआ साथ ही, init.d सामान के लिए बस 'सेवा ntpd stop/start' स्वैप करें। –

संबंधित मुद्दे