আইওটপ ছাড়াই কোন প্রক্রিয়াটি I / O করে


12

লিনাক্সে, আমি জানতে চাই যে কোন ডিস্কে আমার ডিস্ক আই / ও ব্যান্ডউইথ ব্যবহার করে।

আমি জানি আমি ব্যবহার করতে পারি iotopতবে আমার কাছে এমন একটি মেশিন রয়েছে যেখানে বিভিন্ন কারণে, iotopইনস্টল করা যায় না।

আমি কীভাবে ম্যানুয়ালি এই তথ্য পেতে পারি? ( iotopনিজেই কীভাবে এগিয়ে যায়?)

উত্তর:


15

ফাইলটি /proc/<pid>/ioআপনার যা প্রয়োজন তা উপস্থাপন করে। এটির মতো আউটপুট পেতে কিছুটা স্ক্রিপ্টিং কাজ iotop। দেখুন Linux kernel ডকুমেন্টেশন থেকে /proc/<pid>/ioফাইল মান:

rchar

আই / ও কাউন্টার: অক্ষরগুলি পড়ায় স্টোরেজ থেকে এই টাস্কটি কতগুলি বাইট পড়েছে তার সংখ্যা। এটি কেবলমাত্র বাইটের সমষ্টি যা এই প্রক্রিয়াটি () এবং প্রিড () পড়ার জন্য পাস হয়েছিল। এতে tty IO এর মতো জিনিস অন্তর্ভুক্ত রয়েছে এবং এটি প্রকৃত শারীরিক ডিস্ক আইও প্রয়োজন ছিল কিনা তা দ্বারা প্রভাবিত হয় না (পঠন পেজ থেকে ক্যাচটি সন্তুষ্ট থাকতে পারে)

wchar

আই / ও কাউন্টার: অক্ষরগুলি লেখা এই টাস্কটি তৈরি করেছে বা ডিস্কে লেখার কারণ হতে পারে তার সংখ্যা। আরচারের মতো এখানেও একই জাতীয় সতর্কতা প্রয়োগ হয়।

[...]

read_bytes

আই / ও কাউন্টার: বাইটস স্টোরেজ স্তর থেকে এই প্রক্রিয়াটি সত্যিকার অর্থে আনার কারণ হিসাবে বাইট সংখ্যাটি গণনা করার প্রচেষ্টাটি পড়েন। সাবমিট_বায়ো () স্তরে সম্পন্ন হয়েছে, সুতরাং এটি ব্লক-ব্যাকড ফাইল সিস্টেমগুলির জন্য সঠিক।

write_bytes

আই / ও কাউন্টার: এই প্রক্রিয়াটি স্টোরেজ স্তরে প্রেরণের কারণে বাইট সংখ্যাটি গণনা করার চেষ্টা করা বাইটস written এটি পৃষ্ঠা-নোংরা সময়ে করা হয়।

এখন, আপনি সেই ছোট 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

এটি তাদের মধ্যে 2 সেকেন্ডের বিলম্বের সাথে দুটি তালিকা তৈরি করে ( $delay: হতে পারে- বা হ্রাস করা যেতে পারে) এবং তারপরে তালিকার তুলনা করে এবং পার্থক্য গণনা করে। সর্বাধিক I / O সহ 10 টি প্রক্রিয়া শেষ 2 সেকেন্ডে তাদের I / O ব্যান্ডউইথ দিয়ে মুদ্রিত হয়। আপনি যদি I / O পড়ার পরিবর্তে 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)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.