पोस्टग्रेज और पोस्टमास्टर सेवाओं से उच्च CPU उपयोग की समस्या निवारण?


28

मैं एक खुला स्रोत (आरएचईएल 6.2) आधारित मशीन चला रहा हूं जो कि एमजीएम सॉफ्टवेयर चला रहा है। जब मैं topकमांड चलाता हूं , तो मैं देखता हूं postgresऔर postmasterदोनों 96% CPU उपयोग के साथ हैं। क्या पिन-पॉइंट करने का कोई तरीका है या देखें कि इन सेवाओं के कारण क्या है?


2
"आरएचसीई 6.2"? क्या आपका मतलब है "आरएचईएल 6.2"? मुझे लगता postgressहै postgresकि आपने इसे सिर्फ हाथ से कॉपी किया है।
क्रेग रिंगर

जवाबों:


30

आप pg_stat_activityसिस्टम तालिका का उपयोग करके एक विशिष्ट पोस्टग्रैड बैकएंड आईडी को सिस्टम प्रोसेस आईडी से मिला सकते हैं ।

SELECT pid, datname, usename, query FROM pg_stat_activity;एक अच्छा प्रारंभिक बिंदु हो सकता है।
एक बार जब आपको पता चल जाता है कि आप कौन-सी क्वेरी चला रहे हैं, तो आप आगे की जांच कर सकते हैं ( EXPLAIN/ EXPLAIN ANALYZE, लॉक की जाँच करें, आदि)


क्या यह सटीक प्रश्न है, मैं db से ज्यादा परिचित नहीं हूं क्योंकि सीम पर काम करने वाले सेकेंड आदमी, आपका चयन कथन, क्या मुझे इसे शीर्ष कमांड से फीड करना है?
असद

1
@asadz नहीं, इसे छोटा कर दिया गया था (अब निश्चित किया गया है) - यदि आपके पास विशिष्ट PID हैं और यह देखना चाहते हैं कि वे क्या चला रहे हैं तो आप उन्हें एक WHEREखंड के साथ अलग कर सकते हैं , लेकिन यदि आपके पास PID की एक बड़ी संख्या नहीं है तो यह वैसा ही है पूर्ण आउटपुट के माध्यम से खोजना आसान है। पोस्टग्रेज मैनुअल में आपके द्वारा बाहर निकलने केpg_stat_activity साथ-साथ अन्य आंकड़े-कलेक्टर टेबल (जो आपकी समस्या उपयोगकर्ता क्वेरी नहीं है, तो आपकी मदद कर सकते हैं ) पर अतिरिक्त विवरण है।
voretaq7

जब मैं इस क्वेरी को निष्पादित करता हूं, तो कोई PID नहीं है जिस पर मुझे संदेह करना है
Fendi Tri Cahyono

सुराग के लिए धन्यवाद, हाल ही में मैं इसी तरह के मुद्दे से मिला और चयन
याओ

14

मैं एक ही मुद्दा रहा था। Postgresql AWS RDS पर सेटअप है और यह उदाहरण बढ़ाने के बाद भी 100% cpu उपयोग कर रहा था। मैंने यहां दिखाई गई विधि के साथ डिबग किया और एक विधि ने मेरे लिए काम किया।

मैंने सबसे लंबे समय तक चलने वाली क्वेरी के लिए जाँच की और पता चला कि कुछ प्रश्न अटके हुए थे और 3-4 घंटे से अधिक समय से चल रहे थे। यह जानने के लिए कि क्वेरी कितने समय से चल रही है, निम्न कमांड चलाएँ:

SELECT max(now() - xact_start) FROM pg_stat_activity
                               WHERE state IN ('idle in transaction', 'active');

यदि यह एक घंटे से अधिक है, तो यह मुद्दा है। लंबे समय तक चलने वाले कनेक्शन को मारें और आवेदन पक्ष से कनेक्शन की अधिकतम आयु को सीमित करें।


8

यदि यह वास्तव में उस सभी सीपीयू का उपयोग करने वाला पोस्टमास्टर है, तो संभवतः आपके पास लॉक विवाद मुद्दे हैं, शायद बहुत अधिक होने के कारण max_connectionsmax_connectionsयदि यह मामला है तो कनेक्शन पूलर को कम करने और उपयोग करने पर विचार करें ।

अन्यथा: विवरण, कृपया। top -b -n 1एक शुरुआत के लिए पूर्ण उत्पादन ।


यह समझ में आता है; चूंकि सीम विश्लेषक द्वारा बहुत सारे डेटा को आगे और पीछे क्वेरी करने के लिए उपयोग किया जाता है; वहाँ एक तरह से मैं ताला स्थिति पर जाँच कर सकते है; या इसके लिए जिम्मेदार शर्तें; ?
asadz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.