सवाल प्रति प्रक्रिया डिस्क I / O उपयोग की जांच कैसे करें


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

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

"सर-डी" के लिए आउटपुट, सिस्टम स्टॉल लगभग 12.58-13.01 बजे हुआ।

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

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


36
2017-08-12 07:48


मूल


ऐसा लगता है कि समस्या एक विशेष प्रक्रिया कम हो सकती है और अधिक स्पोरैडिक रूप से उत्तरदायी डिस्क हो सकती है। डिस्क इस तरह की चीजें करते हैं जो सिस्टम स्तर पर चट्टानों के रूप में दिखाई देती हैं जो एक सिस्टम हिट होती है। यदि आपको कोई अपराधी नहीं लगता है, तो यह डिस्क उप-प्रणाली की जांच करने का समय है। - slashdot
unix.stackexchange.com/questions/21295/... || stackoverflow.com/questions/14021810/... - Ciro Santilli 新疆改造中心 六四事件 法轮功


जवाब:


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


37
2017-08-12 09:19



धन्यवाद! फिर भी मेरे टूलबॉक्स में स्टोर करने के लिए एक और गीक खिलौना। :-) - Janne Pikkarainen
बैच मोड में चल रहा आईपोटो उपरोक्त "ps -eo" समाधान के लिए एक बहुत अच्छा पूरक / प्रतिस्थापन हो सकता है। धन्यवाद! - Avada Kedavra
बहुत बढ़िया, "iotop -n 1 -b -o" वास्तव में मुझे आवश्यक आउटपुट प्रदान करता है। धन्यवाद! - Avada Kedavra
ऐसा लगता है कि इसे चलाने के लिए सिस्टम तक रूट पहुंच की आवश्यकता है - user5359531


आप उपयोग कर सकते हैं pidstat इस आदेश के साथ प्रत्येक 20 सेकंड प्रति प्रक्रिया संचयी आईओ आंकड़े मुद्रित करने के लिए:

# 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]              

23
2018-04-13 14:12





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

आप कुछ चीजें हैं पराक्रम हालांकि, निहित या खत्म करने के लिए जांच करने में सक्षम हो - /proc आपका दोस्त है।

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

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

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

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

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

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

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


7
2018-01-11 22:52





उपयोग atop। (http://www.atoptool.nl/)

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

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

बुरी चीज फिर से होती है:

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

% atop -r historical_everything.atop

चूंकि आपने आईओ कहा था, मैं 3 चाबियाँ मारूंगा: टीडीडी

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

7
2017-10-16 16:41





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

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


3
2017-08-12 08:02



हैलो जेन, कर्नेल दुर्भाग्य से डीबग फ़ाइल सिस्टम के साथ संकलित नहीं है, और यह एक लाइव सिस्टम है इसलिए मैं कर्नेल को पुन: संकलित करने में असमर्थ हूं। क्या बिना किसी संकलन के ऐसा करने का कोई और तरीका है? - Avada Kedavra
ठीक है, मैंने अपना जवाब थोड़ा सा संपादित किया :) - Janne Pikkarainen
बढ़िया, अब हम कहीं जा रहे हैं! मैं इसे एक cronjob में डालने और सर क्रॉन नौकरी के साथ एक साथ निष्पादित करने के बारे में सोच रहा हूँ। फिर, अगली बार जब सर्वर स्टाल करता है तो मुझे पेज दोषों की दर की तुलना करने में सक्षम होना चाहिए ताकि यह देखने के लिए कि कौन सी प्रक्रिया / प्रक्रियाओं में पेज दोषों की वृद्धि हुई है। मुझे लगता है कि मैं दुर्भाग्यपूर्ण हो सकता हूं और स्टॉल के दौरान सभी प्रक्रियाओं के लिए डिस्क आईओ में वृद्धि देख सकता हूं, लेकिन यह निश्चित रूप से एक अच्छी कोशिश के लायक है। धन्यवाद जान! (अगर मैं कर सकता हूं तो मैं आपके उत्तर पर वोट दूंगा: एस) - Avada Kedavra
आपका स्वागत है। मुझे बताएं कि यह कैसे चला गया, यह सिर्फ एक रचनात्मक समस्या है जो मुझे हल करने का प्रयास करती है। :-) - Janne Pikkarainen
Iotop आउटपुट व्याख्या के तहत आसान है, इसलिए बीमार उस समाधान को स्वीकार करते हैं। जैसे ही मैंने ऐसा करने के लिए पर्याप्त प्रतिनिधि अर्जित किया है, मैं आपके उत्तर पर वोट देने के लिए वापस आऊंगा। आपके समर्थन के लिए धन्यवाद! - Avada Kedavra