फ़ाइल को /proc/<pid>/io
आपकी ज़रूरत का प्रतिनिधित्व करता है। इसके समान आउटपुट पाने के लिए यह एक स्क्रिप्टिंग का काम है iotop
। देखें लिनक्स कर्नेल प्रलेखन के लिए /proc/<pid>/io
फ़ाइल मान:
rchar
I / O काउंटर: chars read बाइट्स की संख्या जो इस कार्य के कारण स्टोरेज से पढ़ी जाती है। यह केवल बाइट्स का योग है जिसे पढ़ने के लिए यह प्रक्रिया पास की गई है () और pread ()। इसमें tty IO जैसी चीजें शामिल हैं और यह इस बात से अप्रभावित है कि वास्तविक भौतिक डिस्क IO की आवश्यकता थी या नहीं (रीड पेजेक से संतुष्ट हो सकती है)
wchar
I / O काउंटर: chars लिखा बाइट्स की संख्या जो इस कार्य के कारण हुई है, या डिस्क पर लिखे जाने का कारण होगा। इसी तरह के कैचर्स यहां rchar के साथ लागू होते हैं।
[...]
read_bytes
I / O काउंटर: बाइट्स ने बाइट्स की संख्या को गिनने का प्रयास किया है जो इस प्रक्रिया को वास्तव में भंडारण परत से प्राप्त करने का कारण बना। सबमिट_बीओ () स्तर पर किया गया, इसलिए यह ब्लॉक-समर्थित फ़ाइल सिस्टम के लिए सटीक है।
write_bytes
I / O काउंटर: बाइट्स में बाइट्स की संख्या को गिनने का प्रयास किया जाता है, जिसके कारण यह प्रक्रिया स्टोरेज लेयर पर भेजी जाती है। यह पृष्ठ-गंदा समय पर किया जाता है।
अब, आप उस छोटी bash
स्क्रिप्ट का उपयोग कर सकते हैं :
#!/bin/bash
if [ "$(id -u)" -ne 0 ] ; then
echo "Must be root" 2>&1
exit 1
fi
delay=2
lista=$(for p in $(pgrep "."); do echo -n "$p "; grep ^rchar /proc/$p/io 2>/dev/null; done)
while :; do
echo "-----"
listb=$(for p in $(pgrep "."); do echo -n "$p "; grep ^rchar /proc/$p/io 2>/dev/null; done)
echo "$lista" | while read -r pida xa bytesa; do
[ -e "/proc/$pida" ] || continue
echo -en "$pida:\t"
bytesb=$(echo "$listb" | awk -v pid=$pida '$1==pid{print $3}')
echo "$((($bytesb - $bytesa) / $delay)) b/s"
done | sort -nk2 | tail
sleep $delay
listb=$lista
done
यह दो सेकंड की देरी के साथ दो सूचियाँ बनाता है $delay
: ( उनके बीच में या में कमी हो सकती है), और फिर सूचियों की तुलना करता है और अंतरों की गणना करता है। सबसे अधिक I / O के साथ 10 प्रक्रिया अंतिम 2 सेकंड में उनके I / O बैंडविथ के साथ मुद्रित होती है। आप आई / ओ के बजाय पढ़ के बारे में जानना चाहते हैं मैं / हे बस संपादित grep
करने के लिए सूची में आदेश wchar
के बजाय rchar
:
lista=$(for p in $(pgrep "."); do echo -n "$p "; grep ^wchar /proc/$p/io 2>/dev/null; done)
listb=$(for p in $(pgrep "."); do echo -n "$p "; grep ^wchar /proc/$p/io 2>/dev/null; done)