MySQL उच्च CPU उपयोग [बंद]


191

हाल ही में मेरा सर्वर सीपीयू बहुत अधिक रहा है।

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

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

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


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

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

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

उच्च CPU लगभग हमेशा अयोग्य प्रश्नों का मतलब है। ऐसे आमतौर पर बेहतर अनुक्रमण (विशेष रूप से 'समग्र') और / या क्वेरी में सुधार के माध्यम से हल किए जाते हैं।
रिक जेम्स

जवाबों:


265

पहले मैं कहूंगा कि आप शायद लगातार कनेक्शन बंद करना चाहते हैं क्योंकि वे लगभग हमेशा अच्छे से अधिक नुकसान करते हैं।

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

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

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

SHOW PROCESSLIST;

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

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

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

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


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

इसी समस्या को हल करते हुए तालिकाओं को अनुक्रमित करके हल किया जाता है, धन्यवाद स्टीवन और जूडलिंग
gabrielem

@ Juddling क्या आप इस पर विस्तृत कर सकते हैं कि कृपया तालिका को कैसे अनुक्रमित करें? शायद कुछ लिंक? मुझे पता है कि यह एक समय हो गया है, लेकिन मैं इस चीज के लिए वास्तव में नया हूं। सॉरी
फ्रॉम द नोबिश

धीमी क्वेरी को लॉग करने से मुझे उच्च CPU उपयोग के अपने विशेष मुद्दे को खोजने में मदद मिली। मेरे मामले में, यह एक Wordpress plugin (अल्टीमेट-टैग-क्लाउड-विजेट) था, जो लोकप्रिय टैग दिखाने के लिए हर हिट के साथ एक राक्षसी क्वेरी कर रहा था। यह एक शानदार प्लगइन है, लेकिन इसे किसी प्रकार के कैशिंग के साथ बढ़ाने की आवश्यकता है (मैंने अपने मुद्दे को हल करने के लिए इसे अनुकूलित करना समाप्त कर दिया)।
jkincali

एक और बात जो एक अलग समस्या में मदद करती है, ऊपर वर्णित पैरामीटर innodb_buffer_pool_size को संशोधित कर रही थी। उच्च CPU उपयोग का कारण खोजने की कोशिश करते हुए, मैंने कहीं पढ़ा कि innodb_buffer_pool_size कम से कम फ़ाइल का आकार ibdata1 होना चाहिए, जो कि / var / lib / mysql में स्थित है। ऐसा लगता है कि जब यह स्मृति में रहने में सक्षम होता है, तो InnoDB बहुत अधिक कुशलता से काम करता है। यह कुछ स्थितियों में करना मुश्किल हो सकता है क्योंकि ibdata1 बहुत बड़ा हो सकता है! यह भी कहीं न कहीं innodb_log_buffer_size को innodb_buffer_pool_size के आकार का 25% सुनिश्चित करने के लिए सुझाया गया था।
jkincali

167

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

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

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

22
चूंकि मूल पोस्ट लगभग 3 साल पहले था, मुझे संदेह है कि यह मूल पोस्टर की समस्या का कारण है। लेकिन यह मेरी समस्या का कारण था, और मुझे अभी बचा लिया - इसलिए धन्यवाद! अधिक जानकारी: blog.mozilla.org/it/2012/06/30/…
रसेल जी

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

2
क्या यह केवल सुनिश्चित करने के लिए निष्पादित किया जा सकता है? मेरा मतलब है, क्या यह सुरक्षित है भले ही इसका कारण न हो?
मुहम्मद गालबाना

2
1 जुलाई 2015 - मैंने अभी-अभी Amazon A चल रहे वर्तमान AWS EC2 सर्वर पर यह बहुत ही लंबी छलांग लगाई है। sudo service ntpd stopइस कॉन्फ़िगरेशन पर उपयोग करें ।
मैट वैन एंडेल

1
इस समाधान के लिए +1। मेरा MySQL बिना किसी कारण के महीनों के लिए 50-60% पर चल रहा था, इस समाधान को लागू करने के बाद यह अब घटकर 0.0-0.3% हो गया जो कि कैसे होना चाहिए था। बहुत बहुत धन्यवाद।
जीशान

32

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


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

2
मुझे लगता है कि वोट डाउन होने के कारण MySQL बाहरी दुनिया के लिए दिखाई देना एक अच्छा विचार नहीं है।
मिकुल्ल्स

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

16
मैं इसे नफरत करता हूं जब कोई नीचे वोट देता है और जाता है!
मुहम्मद गालबाना

1
+1 क्योंकि यह MySQL के लिए उच्च CPU उपयोग के लिए एक वैध कारण है, और किसी के लिए भी यह वास्तव में इस जानकारी की आवश्यकता है इसका जवाब है!
क्रिस ब्राउन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.