Howto चेक डिस्क I / O उपयोग प्रति प्रक्रिया


45

Im एक स्टेलिंग लिनक्स सिस्टम के साथ एक समस्या है और मुझे डिस्क I / O उपयोग में भारी चोटियों, औसत सेवा समय के साथ-साथ सिस्टम स्टाल के समय औसत प्रतीक्षा समय की रिपोर्ट करने के लिए sysstat / sar मिला है।

अगली बार ऐसा होने पर मैं यह कैसे निर्धारित कर सकता हूं कि कौन सी प्रक्रिया इन चोटियों का कारण बन रही है?
क्या सर के साथ ऐसा करना संभव है (यानी: क्या मैं इस जानकारी को रिकॉर्ड की गई सार फाइलों से खोज सकता हूं?

"सर-डी" के लिए आउटपुट, सिस्टम स्टाल 12.58-13.01pm के आसपास हुआ।

12:40:01          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
12:40:01       dev8-0     11.57      0.11    710.08     61.36      0.01      0.97      0.37      0.43
12:45:01       dev8-0     13.36      0.00    972.93     72.82      0.01      1.00      0.32      0.43
12:50:01       dev8-0     13.55      0.03    616.56     45.49      0.01      0.70      0.35      0.47
12:55:01       dev8-0     13.99      0.08    917.00     65.55      0.01      0.86      0.37      0.52
13:01:02       dev8-0      6.28      0.00    400.53     63.81      0.89    141.87    141.12     88.59
13:05:01       dev8-0     22.75      0.03    932.13     40.97      0.01      0.65      0.27      0.62
13:10:01       dev8-0     13.11      0.00    634.55     48.42      0.01      0.71      0.38      0.50

यह एक सूत्र का प्रश्न है जो मैंने कल शुरू किया था: अचानक लोड और डिस्क ब्लॉक प्रतीक्षा में चोटियाँ , मुझे उम्मीद है कि ठीक है कि मैंने इस विषय पर एक नया विषय / प्रश्न बनाया है क्योंकि मैं अभी तक समस्या का समाधान नहीं कर पाया हूं।


ऐसा लगता है कि समस्या एक विशेष प्रक्रिया कम हो सकती है और एक छिटपुट अनुत्तरदायी डिस्क हो सकती है। डिस्क इस प्रकार की चीजें करती हैं जो सिस्टम स्तर पर दिखाई देती हैं जो कि सिस्टम हिट होती हैं। यदि आपको कोई अपराधी नहीं मिलता है, तो यह डिस्क उप-सिस्टम की जांच करने का समय है।
स्लैशडॉट



जवाबों:


46

यदि आप अगली चोटी के उपयोग की अवधि को पकड़ने के लिए पर्याप्त भाग्यशाली हैं, तो आप iotop का उपयोग करके, प्रति-प्रक्रिया I / O आँकड़ों का अध्ययन कर सकते हैं ।


धन्यवाद! फिर भी मेरे टूलबॉक्स में स्टोर करने के लिए एक और geek खिलौना। :-)
जने पिकरकेन

बैच मोड में iotop चलना उपरोक्त "ps -eo" समाधान के लिए एक बहुत अच्छा पूरक / प्रतिस्थापन हो सकता है। धन्यवाद!
अवाड़ा केदवरा

2
बहुत बढ़िया, "iotop -n 1 -b -o" बिल्कुल वही आउटपुट प्रदान करता है जिसकी मुझे ज़रूरत है। धन्यवाद!
अवदा केदावरा

ऐसा लगता है कि सिस्टम को चलाने के लिए रूट एक्सेस की आवश्यकता है
user5359531

29

आप इस आदेश के साथ हर 20 सेकंड में प्रक्रियात्मक io आँकड़े प्रिंट करने के लिए पिडस्टेट का उपयोग कर सकते हैं :

# pidstat -dl 20

प्रत्येक पंक्ति में follwing कॉलम होंगे:

  • पीआईडी ​​- प्रक्रिया आईडी
  • kB_rd / s - कार्य को किलोबाइट की संख्या के कारण डिस्क प्रति सेकंड से पढ़ा जाना चाहिए।
  • kB_wr / s - कार्य के कारण किलोबाइट की संख्या, या प्रति सेकंड डिस्क पर लिखे जाने का कारण होगा।
  • kB_ccwr / s - किलोबाइट की संख्या जिनकी डिस्क पर लिखने को कार्य द्वारा रद्द कर दिया गया है। यह तब हो सकता है जब कार्य कुछ गंदे पृष्ठचक्र को काटता है। इस मामले में, कुछ आईओ जो एक अन्य कार्य के लिए जिम्मेदार हैं, वह नहीं होगा।
  • कमांड - टास्क का कमांड नाम।

आउटपुट इस तरह दिखता है:

05:57:12 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:57:32 PM       202      0.00      2.40      0.00  jbd2/sda1-8
05:57:32 PM      3000      0.00      0.20      0.00  kdeinit4: plasma-desktop [kdeinit]              

05:57:32 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:57:52 PM       202      0.00      0.80      0.00  jbd2/sda1-8
05:57:52 PM       411      0.00      1.20      0.00  jbd2/sda3-8
05:57:52 PM      2791      0.00     37.80      1.00  kdeinit4: kdeinit4 Running...                   
05:57:52 PM      5156      0.00      0.80      0.00  /usr/lib64/chromium/chromium --password-store=kwallet --enable-threaded-compositing 
05:57:52 PM      8651     98.20      0.00      0.00  bash 

05:57:52 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:58:12 PM       202      0.00      0.20      0.00  jbd2/sda1-8
05:58:12 PM      3000      0.00      0.80      0.00  kdeinit4: plasma-desktop [kdeinit]              

10

कुछ भी नहीं चल रहा है निगरानी, ​​आप बस समय के बाद संवेदनशील डेटा वापस नहीं मिल सकता है ...

ऐसी कुछ चीज़ें हैं जिन्हें आप जाँचने में सक्षम हो सकते हैं लेकिन फिर भी समाप्त करने के लिए - /procआपका मित्र है।

sort -n -k 10 /proc/diskstats
sort -n -k 11 /proc/diskstats

फ़ील्ड 10, 11 संचित क्षेत्र हैं, और संचित समय (ms) लेखन। यह आपके हॉट फाइल-सिस्टम विभाजन को दिखाएगा।

cut -d" " -f 1,2,42 /proc/*/stat | sort -n -k +3

वे फ़ील्ड PID, कमांड और संचयी IO- वेट टिक हैं। यह आपकी गर्म प्रक्रियाओं को दिखाएगा, हालांकि केवल अगर वे अभी भी चल रहे हैं । (आप शायद अपने फाइल सिस्टम को थ्रेडिंग को अनदेखा करना चाहते हैं।)

उपरोक्त की उपयोगिता अपटाइम पर निर्भर करती है, आपकी लंबी चलने वाली प्रक्रियाओं की प्रकृति और आपकी फाइल सिस्टम का उपयोग कैसे किया जाता है।

कैविट्स: पूर्व-2.6 कर्नेल पर लागू नहीं होता है, यदि अनिश्चित हो तो अपने दस्तावेज की जांच करें।

(अब जाओ और अपने भविष्य-स्व को एक एहसान करो, मुनिन / नागियो / कैक्टि / स्थापित करो;


10

का उपयोग करें atop। ( http://www.atoptool.nl/ )

एक संपीड़ित फ़ाइल में डेटा लिखें जो atopबाद में एक इंटरैक्टिव शैली में पढ़ सकता है। हर 10 सेकंड में एक रीडिंग (डेल्टा) लें। इसे 1080 बार करें (3 घंटे; ताकि यदि आप इसके बारे में भूल जाएं तो आउटपुट फ़ाइल आपको डिस्क से बाहर नहीं चलाएगी):

$ atop -a -w historical_everything.atop 10 1080 &

बुरी बात के बाद फिर से होता है:

(भले ही यह अभी भी पृष्ठभूमि में चल रहा है, यह हर 10 सेकंड में लागू होता है)

% atop -r historical_everything.atop

चूंकि आपने IO कहा था, इसलिए मैं 3 कुंजी मारूंगा: tdD

t - move forward to the next data gathering (10 seconds)
d - show the disk io oriented information per process
D - sort the processes based on disk activity
T - go backwards 1 data point (10 seconds probably)
h - bring up help
b - jump to a time (nearest prior datapoint) - e.g. b12:00 - only jumps forward
1 - display per second instead of delta since last datapiont in the upper half of the display

4

का उपयोग करें btrace। उदाहरण के लिए, इसका उपयोग करना आसान है btrace /dev/sda। यदि कमांड उपलब्ध नहीं है, तो यह संभवतः पैकेज ब्लक्ट्रेस में उपलब्ध है ।

संपादित करें : चूंकि डीबगफ़ल कर्नेल में सक्षम नहीं है, आप कोशिश कर सकते हैं date >>/tmp/wtf && ps -eo "cmd,pid,min_flt,maj_flt" >>/tmp/wtfया समान। लॉगिंग पृष्ठ दोष निश्चित रूप से btrace का उपयोग करने की तुलना में सभी पर नहीं है, लेकिन यदि आप भाग्यशाली हैं, तो यह आपको सबसे डिस्क भूख प्रक्रियाओं के बारे में कुछ संकेत देता है। मैंने बस यही कोशिश की कि मेरे सबसे ज्यादा I / O सघन सर्वर और सूची में वे प्रक्रियाएं शामिल हैं जिन्हें मैं जानता हूं कि मैं बहुत सारे I / O का उपभोग कर रहा हूं।


हैलो जेन, कर्नेल दुर्भाग्य से डिबग फाइल सिस्टम के साथ संकलित नहीं है, और इसकी लाइव प्रणाली इसलिए मैं कर्नेल को पुन: स्थापित करने में असमर्थ हूं। वहाँ किसी भी अन्य तरीके से इस recompiling बिना है?
अवदा केदावरा

ठीक है, मैंने अपना उत्तर थोड़ा संपादित किया :)
Janne Pikkarainen

महान, अब हम कहीं जा रहे हैं! Im इसे क्रोनजोब में डालने के बारे में सोच रहा हूं और इसे सर क्रॉन जॉब के साथ समवर्ती रूप से निष्पादित करता हूं। फिर, अगली बार जब सर्वर स्टालों मैं पृष्ठ दोषों की दर की तुलना करने में सक्षम होना चाहिए यह देखने के लिए कि किस प्रक्रिया / प्रक्रियाओं में पृष्ठ दोषों की वृद्धि दर है। मुझे लगता है कि मैं अशुभ हो सकता हूं और स्टॉल के दौरान सभी प्रक्रियाओं के लिए डिस्क io में एक वृद्धि देख सकता हूं, लेकिन निश्चित रूप से यह एक अच्छी कोशिश के लायक है। धन्यवाद जेन! (यदि मैं कर सकता था तो मैं आपके उत्तर पर वोट करूंगा: S)
अवदा केदवरा

आपका स्वागत है। मुझे पता है कि यह कैसे चला गया, यह सिर्फ एक रचनात्मक समस्या थी जो मुझसे हल करने की कोशिश कर रही थी। :-)
जैने पिकरकेन

Iotop आउटपुट व्याख्या के तहत आसान है, इसलिए बीमार उस समाधान को स्वीकार करते हैं। जैसे ही मैंने ऐसा करने के लिए पर्याप्त कमाई की है, वैसे ही अपने उत्तर पर वोट देने के लिए वापस आ जाएं। आपके समर्थन के लिए धन्यवाद!
अवदा केदावरा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.