GNU/Linux >> Linux の 問題 >  >> Linux

Linux でディスクに書き込みを行っているプロセスを特定する方法

Linux では、プロセスごとの I/O 統計を取得することもできるため、iotop という名前のプログラムを使用して、誰が頻繁に読み書きを行っているかを正確に確認できます。 iotop は root ユーザーで開始する必要があります。たとえば、iotop を使用して、ハードディスクの読み書き速度を調べてから、q キーを押して終了します。 iotop のマニュアル セクションを読んで、列の並べ替えなどのショートカットの詳細を確認してください。

どのプロセスがディスクに書き込みを行っているかを表示するには、「iotop」コマンドを使用してその情報を取得できます

# iotop

次の例のような出力が表示されます:

Total DISK READ : 0.00 B/s | Total DISK WRITE : 88.95 M/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 88.95 M/s
  TID PRIO USER DISK READ DISK WRITE SWAPIN IO>    COMMAND
27236 be/4 root 0.00 B/s  88.95 M/s  0.00 % 87.91% dd if=/dev/zero of=test.zero bs=1024k count=1000 oflag=direct conv=notrunc
25600 be/4 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % less -s
    1 be/4 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % systemd --switched-root --system --deserialize 22
    2 be/4 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [kthreadd]
    3 be/4 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [ksoftirqd/0]
    6 be/4 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [kworker/u30:0]
    7 be/4 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [rcu_sched]
    8 be/4 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [rcu_bh]
    9 be/4 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [rcuos/0]
   10 be/4 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [rcuob/0]
   11 rt/4 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [migration/0]
   12 rt/4 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [watchdog/0]
   13 be/0 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [khelper]
   14 be/4 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [kdevtmpfs]
   15 be/0 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [netns]
   16 be/0 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [perf]
   17 be/4 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [xenwatch]
   18 be/4 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [xenbus]
   20 be/4 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [khungtaskd]
   21 be/0 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [writeback]
   22 be/5 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [ksmd]
   23 be/7 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [khugepaged]
   24 be/0 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [crypto]
   25 be/0 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [kintegrityd]
   26 be/0 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [bioset]
   27 be/0 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [kblockd]
   28 be/0 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [md]
   29 be/0 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [devfreq_wq]
   31 be/4 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [kswapd0]
   32 be/4 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % [fsnotify_mark]
 1058 be/4 root 0.00 B/s  0.00 B/s   0.00 % 0.00 % cupsd -f

ここに示されているコラムのうち、以下に関心があるかもしれません:

  • TID :この列は、I/O 要求を行うプロセスの PID を提供します。これは、プログラムの調査または終了に使用できます。
  • ディスク読み取り :この列は、リストされたプロセスによって読み取られた 1 秒あたりのバイト数を示します。
  • ディスク書き込み :この列は、リストされたプロセスによって 1 秒あたりに書き込まれたバイト数を示します。
  • IO :この列には、リストされたプロセスが I/O リクエストの発行に費やした時間の割合が表示されます。
  • コマンド :この列は、I/O を処理するプロセスの名前を示します。これがマスター プロセスである場合は、コマンドライン スイッチも含まれる場合があります。

上記の例では、別の ssh セッションで dd テスト (dd if=/dev/zero of=test.zero bs=1024k count=1000 oflag=direct conv=notrunc) を実行して、ディスクへの W/R アクションを表示しました。 .

ディスクに書き込んでいる現在のプロセスのみを表示したい場合は、「o」キーを押すと、次のような出力が得られます:

Total DISK READ : 0.00 B/s | Total DISK WRITE : 86.90 M/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 86.90 M/s
  TID PRIO USER DISK READ DISK WRITE SWAPIN IO>     COMMAND
27239 be/4 root 0.00 B/s  86.90 M/s  0.00 % 89.17 % dd if=/dev/zero of=test.zero bs=1024k count=1000 oflag=direct conv=notrunc

以下は、使用できる最も一般的なオプションの一部です:

  • を叩く と右矢印キー 並べ替えを変更します。
  • R を押します ソート順を逆にします。
  • o を押します すべてのプロセスまたはスレッドを表示するのではなく、実際に I/O を実行しているプロセスまたはスレッドを表示するだけです。
  • p を押します プロセスのみを表示します。通常、iotop はすべてのスレッドを表示します。
  • a を押します 帯域幅の代わりに累積 I/O を表示します。このモードでは、iotop は、iotop の開始以降に実行された I/O プロセスの量を表示します。
  • i を押します スレッドまたはプロセス スレッド (ionice など) の優先度を変更します。
  • q を押します iotop を終了します。

詳細については、man ページを参照してください。

# man iotop


Linux
  1. Linux でファイルを開いているプロセスを特定するにはどうすればよいですか?

  2. 実行中のプロセスが属するグループを特定する

  3. Linux で UDP トラフィックを生成しているプロセスを特定するにはどうすればよいですか?

  1. Linuxでゾンビプロセスを強制終了する方法

  2. Linuxでディスクをパーティション分割する方法

  3. Linuxにvtopをインストールする方法

  1. ファイルを作成しているプロセスを特定する方法は??

  2. どのプロセスが自分のプロセスにシグナルを送信したかをLinuxで確認するにはどうすればよいですか

  3. Linuxでファイルを使用しているプロセスを見つける方法は?