高いI/Oを担当する特定のファイルの識別

高いI/Oを担当する特定のファイルの識別

これは簡単な問題ですが、初めてこの問題を解決しました。最も多くのI / Oの対象となる特定のファイル/ iノードを見つけます。一般的なシステム概要を取得できれば幸いですが、PIDまたはTIDを提供する必要がある場合は問題ありません。

strace私はポップアップしているプログラムで何もしたくありませんiotopiotopファイルごとにアイテム別に分類された同じツールを使用するのが最善です。私はそれを使用してlsofmailmanがどのファイルを開いたかを見ることができますが、どのファイルがI / Oを受け取っているか、どのくらいのファイルを受け取るかを示しません。

他の場所でこの機能を使用することをお勧めしますが、auditdそうしたくありません。なぜなら、他の目的に使用する監査ファイルに情報が保存されているからです。

今私が経験している具体的な問題は、LVMスナップショットがあまりにも早く埋められることです。私はすでに問題を解決していますが、ls開いているすべてのファイル記述子に対して作業を実行して、どれ/proc/<pid>/fdが最も急速に増加するかを確認するよりも、この方法で問題を解決できるようにしたいと思います。

ベストアンサー1

この問題のいくつかの側面は他のツールによって部分的に解決されていますが、必要なすべての機能を提供するツールはないようです。

オートフ

このツールは、どのプロセスが最も多くのI / Oを消費するかを示します。ただし、特定のファイル名を表示するオプションが不足しています。

$ sudo iotop
Total DISK READ:       0.00 B/s | Total DISK WRITE:       0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                        
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init
    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]
    5 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/u:0]
    6 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]

デフォルトでは、topCPU時間を置いて競合する通常のプロセスペアのタスクを実行します(ディスクI / Oを除く)。スイッチを使用して、高さ30,000フィートのビューを提供するように指示することで、-a時間の経過とともにプロセスの累積を表示できます。

$ sudo iotop -a
Total DISK READ:       0.00 B/s | Total DISK WRITE:       0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                        
  258 be/3 root          0.00 B    896.00 K  0.00 %  0.46 % [jbd2/dm-0-8]
22698 be/4 emma          0.00 B     72.00 K  0.00 %  0.00 % chrome
22712 be/4 emma          0.00 B    172.00 K  0.00 %  0.00 % chrome
 1177 be/4 root          0.00 B     36.00 K  0.00 %  0.00 % cupsd -F
22711 be/4 emma          0.00 B    120.00 K  0.00 %  0.00 % chrome
22703 be/4 emma          0.00 B     32.00 K  0.00 %  0.00 % chrome
22722 be/4 emma          0.00 B     12.00 K  0.00 %  0.00 % chrome

i*ツール(inotify、iwatchなど)

これらのツールはファイルアクセスイベントへのアクセスを提供しますが、特定のディレクトリまたはファイルに特化する必要があります。したがって、パフォーマンスの問題をデバッグするときに不明なプロセスによる悪意のあるファイルアクセスを追跡しようとすると、あまり役に立ちません。

さらに、フレームinotifyワークはアクセスされるファイルに関する詳細を提供しません。これらのツールを使用するとアクセスタイプのみが提供されるため、前後に移動するデータ量に関する情報を取得できません。

iostat

特定のデバイス(ハードドライブ)またはパーティションへのアクセスに基づいて、全体的なパフォーマンス(読み取りと書き込み)を表示します。ただし、どのファイルがこれらのアクセスを生成するかについての情報は提供されません。

$ iostat -htx 1 1
Linux 3.5.0-19-generic (manny)  08/18/2013  _x86_64_    (3 CPU)

08/18/2013 10:15:38 PM
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          18.41    0.00    1.98    0.11    0.00   79.49

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda
                  0.01     0.67    0.09    0.87     1.45    16.27    37.06     0.01   10.92   11.86   10.82   5.02   0.48
dm-0
                  0.00     0.00    0.09    1.42     1.42    16.21    23.41     0.01    9.95   12.22    9.81   3.19   0.48
dm-1
                  0.00     0.00    0.00    0.02     0.01     0.06     8.00     0.00  175.77   24.68  204.11   1.43   0.00

ブロック追跡

このオプションはレベルが低すぎます。どのファイルおよび/またはinodeがアクセスされているかについての可視性が不足しており、生のブロック番号のみを表示できます。

$ sudo blktrace -d /dev/sda -o - | blkparse -i -
  8,5    0        1     0.000000000   258  A WBS 0 + 0 <- (252,0) 0
  8,0    0        2     0.000001644   258  Q WBS [(null)]
  8,0    0        3     0.000007636   258  G WBS [(null)]
  8,0    0        4     0.000011344   258  I WBS [(null)]
  8,5    2        1 1266874889.709032673   258  A  WS 852117920 + 8 <- (252,0) 852115872
  8,0    2        2 1266874889.709033751   258  A  WS 852619680 + 8 <- (8,5) 852117920
  8,0    2        3 1266874889.709034966   258  Q  WS 852619680 + 8 [jbd2/dm-0-8]
  8,0    2        4 1266874889.709043188   258  G  WS 852619680 + 8 [jbd2/dm-0-8]
  8,0    2        5 1266874889.709045444   258  P   N [jbd2/dm-0-8]
  8,0    2        6 1266874889.709051409   258  I  WS 852619680 + 8 [jbd2/dm-0-8]
  8,0    2        7 1266874889.709053080   258  U   N [jbd2/dm-0-8] 1
  8,0    2        8 1266874889.709056385   258  D  WS 852619680 + 8 [jbd2/dm-0-8]
  8,5    2        9 1266874889.709111456   258  A  WS 482763752 + 8 <- (252,0) 482761704
...
^C
...
Total (8,0):
 Reads Queued:           0,        0KiB  Writes Queued:           7,       24KiB
 Read Dispatches:        0,        0KiB  Write Dispatches:        3,       24KiB
 Reads Requeued:         0       Writes Requeued:         0
 Reads Completed:        0,        0KiB  Writes Completed:        5,       24KiB
 Read Merges:            0,        0KiB  Write Merges:            3,       12KiB
 IO unplugs:             2           Timer unplugs:           0

Throughput (R/W): 0KiB/s / 510KiB/s
Events (8,0): 43 entries
Skips: 0 forward (0 -   0.0%)

パトラス

これはLinuxカーネルの新機能であり、人気が高く、Ubuntu 12.10などの最新のディストリビューションにのみ表示されます。私のFedora 14システムにはこの機能がありません。 8-)。

inotify特定のディレクトリやファイルをターゲットにせずに取得できるのと同じアクセスを提供します。

$ sudo fatrace
pickup(4910): O /var/spool/postfix/maildrop
pickup(4910): C /var/spool/postfix/maildrop
sshd(4927): CO /etc/group
sshd(4927): CO /etc/passwd
sshd(4927): RCO /var/log/lastlog
sshd(4927): CWO /var/log/wtmp
sshd(4927): CWO /var/log/lastlog
sshd(6808): RO /bin/dash
sshd(6808): RO /lib/x86_64-linux-gnu/ld-2.15.so
sh(6808): R /lib/x86_64-linux-gnu/ld-2.15.so
sh(6808): O /etc/ld.so.cache
sh(6808): O /lib/x86_64-linux-gnu/libc-2.15.so

上記はファイルアクセスを実行するプロセスIDとアクセス中のファイルを示していますが、帯域幅全体の使用量を提供しないため、各アクセスは他のアクセスと区別できません。

だから何をしますか?

このfatraceオプションは最も有望なものを示していますついにアクセスを実行するプロセスではなく、アクセスされるファイルに基づいて合計ディスクI / O使用量を表示するためのツールを提供します。

引用する

おすすめ記事