Linux (RHEL6.1) でディスク書き込み操作の原因 (またはターゲット ファイル) を記録する方法はありますか?

Linux (RHEL6.1) でディスク書き込み操作の原因 (またはターゲット ファイル) を記録する方法はありますか?

私は PHP ベースのアプリケーション (Apache 内) を搭載した仮想マシンを持っていますが、ディスク アクティビティを確認すると、Apache の実行中は常に 170kbps の書き込みが行われています。

負荷をかけると、サーバーのパフォーマンスは CPU に依存しますが、これはディスク書き込み IO の 20 ~ 30 倍の増加に直接関係しているようです。CPU 使用率のグラフは、書き込みディスク アクセスのグラフを反映しています。

何か案は?

答え1

2つの推奨事項:

iotopは、コマンドのような形式でリアルタイムの I/O 使用状況を表示する便利なプログラムですtop。これにより、すべての I/O を実行しているスクリプト/バイナリを特定できます。新しいカーネルにはすでにインストールされていると思いますが、見つからない場合は、RHEL で yum が提供している可能性があります。

lsofI/O のトラブルシューティングにも役立ち、開いているファイルがすべて一覧表示されます。

アップデート

ディスクアクティビティが「一定」している場合は、iotopどのプロセスが原因であるかがわかります。I/O トランザクション履歴について: ほとんどの Linux ディストリビューションでは、IO 履歴がどこにも記録されていないと思いますが、cron ジョブを追加することはできます。

root として crontab を開きcrontab -e、次の 2 行を追加します。

* * * * * /bin/date >> /var/log/iotop; /usr/local/bin/iotop -bot --iter=3 -q >> /var/log/iotop
* * * * * /bin/date >> /var/log/lsof; /usr/bin/lsof -b -w >> /var/log/lsof

これは 1 分ごとにダンプしてiotopログlsofに出力します。ファイルがすべてのスペースを占有しないようにするには、それぞれに logrotate スクリプトを追加します。例:

someuser@myhost:~> cat /etc/logrotate.d/lsof
/var/log/lsof {
  rotate 3
  weekly
  compress
  missingok
  notifempty
}

答え2

関係のないバックグラウンド タスクが、php がプリコンパイルされている /tmp ディレクトリの内容を削除していたようです。その結果、php のプリコンパイル プロセスが再び開始され、ディスク アクティビティが継続的に発生しました。

関連情報