MySQL प्रक्रिया 100% CPU उपयोग पर जाती है


12

मैं अपने LAMP सर्वर के साथ कुछ समस्याओं का सामना कर रहा हूं। हाल ही में सब कुछ बहुत धीमा हो गया, भले ही मेरी वेबसाइटों पर आगंतुक गणना में बहुत बदलाव नहीं हुआ। जब मैं topकमांड चलाता हूं , तो यह कहता है कि MySQL प्रक्रिया 150-200% सीपीयू से अधिक है। यह कैसे संभव है, मैंने हमेशा सोचा कि 100% एक अधिकतम है?

मैं Ubuntu 9.04 सर्वर संस्करण को 1,5 जीबी रैम के साथ चला रहा हूं।

my.cnf समायोजन:

key_buffer      = 64M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size       = 8

myisam-recover         = BACKUP
max_connections        = 200
table_cache            = 512
table_definition_cache = 512
thread_concurrency     = 2

read_buffer_size = 1M
sort_buffer_size = 4M
join_buffer_size = 1M

query_cache_limit   = 1M  # the maximum size of individual query results
query_cache_size    = 128M

यहाँ MySQLTuner का आउटपुट है :

MySQLTuner आउटपुट

topआदेश:

शीर्ष आउटपुट

इस समस्या का कारण क्या हो सकता है? my.cnfसर्वर को हैंग होने से रोकने के लिए क्या मैं अपने में बदलाव कर सकता हूं ?

जवाबों:


15
  1. कुंजी बफ़र बढ़ाएं (आपका वर्तमान में 64 एमबी है, लेकिन कुल इंडेक्स 116 एम हैं, इसलिए कम से कम 128 एमबी डालें)। तुरंत मदद करनी चाहिए।
  2. अपने तालिकाओं पर mysqloptimize और mysqlrepair चलाएँ
  3. टेबल कैश बढ़ाएँ / टेबल कैश हिट दर बढ़ाने के लिए तालिकाओं की कुल संख्या में कमी करें। हो सकता है कि आपको कुछ अप्रयुक्त या पुराने टेबल मिल गए हों जिन्हें हटाया जा सकता है।

अन्य अनुशंसित कन्फ्यूजन विकल्प:

  • log_slow_queries = /var/log/mysql/mysql-slow.log
  • long_query_time = 4
  • लॉग-प्रश्नों-नहीं-का उपयोग कर-अनुक्रमित

कुछ समय बाद लॉग फ़ाइल की जाँच करें।


सिफारिशों के लिए धन्यवाद, मैं उनकी कोशिश करूँगा और आपको यह बताने में मदद करूंगा कि क्या यह मदद करता है।
टेम्नोविट

कृपया मुझे बताएं, आपने कैसे गणना की कि कुल सूचकांक 116M हैं?
तमनोवित 14

यह अपने आप हो गया :)
Temnovit

5

आपके पास एक प्रोसेसर है जिसमें एक से अधिक कोर हैं, या आपके पास कई प्रोसेसर हैं। यदि आपके पास दो कोर हैं और एक प्रक्रिया दोनों कोर के 100% का उपयोग कर रही है, तो यह शीर्ष में 200% के रूप में दिखाई देगा।

इसी तरह, यह संभावना के अनुसार काम कर रहा है - आपके कॉन्फ़िगरेशन में कुछ भी गलत नहीं है। यदि आप बार-बार हैंग होने का अनुभव कर रहे हैं, तो आपने जो पोस्ट किया है, उससे आप अपनी टेबलों में उचित इंडेक्स जोड़ना चाह सकते हैं (या अपने प्रश्नों को अनुकूलित कर सकते हैं)।


5

top -Hसभी चल रहे थ्रेड्स को देखने के लिए चलाएं और न केवल समग्र प्रक्रिया। इसके अलावा, यदि आप 1शीर्ष पर रहते हुए कुंजी को मारते हैं, तो यह आपको अलग-अलग सीपीयू / कोर के लिए सीपीयू उपयोग दिखाएगा।


धन्यवाद, यह वास्तव में मेरी मदद करता था - वर्षों से शीर्ष का उपयोग कर रहा था और यह नहीं जानता था कि इसमें यह क्षमता थी। मैंने पाया कि एक "शाश्वत" mysql धागा है जो हर समय 60% उपयोगकर्ता CPU का उपभोग करता है, जबकि क्वेरी थ्रेड आते हैं और इसके शीर्ष पर जाते हैं। अब यह पता लगाने के लिए कि यह धागा वास्तव में क्या कर रहा है ...
scipilot

1

मैसूर में स्वतंत्र रूप से काम करने वाली कई प्रक्रियाएं (थ्रेड्स) हैं, उदाहरण के लिए, डिस्क पर मेमोरी से डेटा लिखने के लिए जिम्मेदार है। सीपीयू (और / या कई सीपीयू) में कई कोर के साथ, एक से अधिक थ्रेड काम कर रहे हैं, और इसलिए यह एक कोर के 100% से अधिक चला सकता है - एक सरलीकृत स्तर पर, शायद प्रत्येक कोर के 75% भाग चल रहे हैं , 150% दे रहा है।


1

मैंने सीपीयू से संबंधित नहीं, एक समस्या देखी है। यदि आप एक ही सर्वर पर अपाचे और MySQL का उपयोग कर रहे हैं तो आप अपनी अपाचे गतिविधि में वृद्धि होने पर खराब परिस्थितियों ( RAM ) तक पहुँच सकते हैं ।

MySQLTunner आपको बताता है कि 200 उपलब्ध कनेक्शन (आपकी अधिकतम कनेक्शन सेटिंग) का उपयोग करके आप रैम को भर देंगे। मान लीजिए कि आपके पास अपाचे को 150 प्रक्रिया तक सीमित कर दिया है, तो निश्चित रूप से आपके पास पर्याप्त रैम नहीं होगी जब MySQL और अपाचे 150 कनेक्शंस का उपयोग करने की कोशिश करेंगे (साथ ही अपाचे एक अच्छा रैम ईटर है)।

तो यह रैम के बारे में है और आप शायद अभी तक हिट नहीं हैं :-) शीर्ष कमांड केवल 15 अपाचे प्रक्रिया दिखाते हैं (लेकिन आप लोड औसत 3/6/16 में हैं, इसका मतलब है कि तूफान 15 मिनट पहले था और अब में है छोड़कर)।

सीपीयू समस्या के बारे में, शकलेंडी की अच्छी प्रतिक्रिया के पूरक के लिए , यह एक एकल क्वेरी के कारण हो सकता है। यह एक विशाल तालिका पर हो सकता है, या बहुत सारे री-इंडेक्स कार्यों को कर सकता है, या बहुत सारी अस्थायी फ़ाइल का उपयोग करके, एक लापता (हटाए गए?), आदि का पता लगाने का एकमात्र तरीका धीमी क्वेरी लॉग को सक्रिय कर रहा है (शायद एक उच्च थ्रेसहोल्ड के साथ, 8s की तरह)। फिर इस धीमी क्वेरी लॉग का विश्लेषण करने के लिए mysqlsla टूल का उपयोग करें , और पहचाने गए प्रश्नों पर कुछ व्याख्या चलाएं।


धन्यवाद, वास्तव में, mysql केवल :) के आसपास की प्रक्रिया नहीं है
Temnovit
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.