どのプロセスがシステム上のどのファイルを開いているかを監視して、どのプロセスが特定のファイルに触れ続けているかを追跡できるツールはありますか?
Lsofは、プロセスがファイルを開いている間に実行するかどうかを確認できますが、それがたまに実行される短命のプロセスである場合、lsofでそれをキャッチすることはできません。カーネルトレースを使用するものが必要です。
どのプロセスがシステム上のどのファイルを開いているかを監視して、どのプロセスが特定のファイルに触れ続けているかを追跡できるツールはありますか?
Lsofは、プロセスがファイルを開いている間に実行するかどうかを確認できますが、それがたまに実行される短命のプロセスである場合、lsofでそれをキャッチすることはできません。カーネルトレースを使用するものが必要です。
回答:
おそらくそのために監査システムを使用することができます。これは少し重いですが、次のようなものが機能するはずです(/etc/audit/audit.rules内):
# delete all other rules
-D
# watch the file in question
-w /path/to/file -p rwxa
そして、私はあなたがauditdを再起動する必要があると思います:
sudo service audit restart
(インストールしていない場合は、auditdパッケージに含まれています。)犯人は/var/log/audit/audit.logにあります。
残念ながら、Linuxがファイルの監視を許可するために使用するメカニズムはinotifyであり、有用なデータを抽出するのに十分な情報を提供していません。ファイル名と実行されたアクションのみを取得します。
私はこのようなものを使ってみました:
sudo inotifywait -mr somedir --format "%w%f" | while read file; do echo -n "$file => ";lsof -b $file; echo ""; done
これは、指定されたディレクトリでinotifyイベントをリッスンし、各イベントに対してlsofを実行して、ファイルにアクセスするプロセスをキャッチしようとします。残念ながら、私がテストしたほとんどのアクセス(エディタを使用してファイルに書き込むなど)の場合、LSOFコマンドは遅くなるだけで、問題のプロセスをキャッチできません。
プロセスが問題のあるファイルに対してより集中的なIOを実行する場合、マイレージは異なる場合があります。幸運を。
fnotifystatは、Linuxファイルのアクティビティを監視するように設計されたツールです。
sudo apt-get install fnotifystat
sudo fnotifystat
Total Open Close Read Write PID Process Pathname
7.0 1.0 1.0 5.0 0.0 2075 libvirtd /proc/cpuinfo
6.0 2.0 2.0 2.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu0/topology/physical_package_id
6.0 2.0 2.0 2.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu1/topology/physical_package_id
6.0 2.0 2.0 2.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu2/topology/physical_package_id
6.0 2.0 2.0 2.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu3/topology/physical_package_id
4.0 1.0 1.0 2.0 0.0 2075 libvirtd /sys/devices/system/node
4.0 1.0 1.0 2.0 0.0 2075 libvirtd /sys/devices/system/node/node0
4.0 2.0 2.0 0.0 0.0 15313 gnome-calendar /usr/share/zoneinfo/Europe/London
3.0 1.0 1.0 1.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu0/topology/core_id
3.0 1.0 1.0 1.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu0/topology/thread_siblings_list
3.0 1.0 1.0 1.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu1/topology/core_id
3.0 1.0 1.0 1.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu1/topology/thread_siblings_list
3.0 1.0 1.0 1.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu2/topology/core_id
3.0 1.0 1.0 1.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu2/topology/thread_siblings_list
3.0 1.0 1.0 1.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu3/topology/core_id
3.0 1.0 1.0 1.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu3/topology/thread_siblings_list
3.0 1.0 1.0 1.0 0.0 2075 libvirtd /sys/devices/system/cpu/online
3.0 1.0 1.0 1.0 0.0 2075 libvirtd /sys/devices/system/cpu/present
3.0 1.0 1.0 1.0 0.0 2075 libvirtd /sys/devices/system/node/node0/meminfo
2.0 0.0 0.0 0.0 2.0 12174 xchat /home/cking/.xchat2/xchatlogs/FreeNode-#ubuntu-release.log
1.0 0.0 0.0 0.0 1.0 12174 xchat /home/cking/.xchat2/xchatlogs/FreeNode-#ubuntu-desktop.log
1.0 0.0 0.0 0.0 1.0 12174 xchat /home/cking/.xchat2/xchatlogs/FreeNode-#ubuntu-devel.log
1.0 0.0 0.0 0.0 1.0 12174 xchat /home/cking/.xchat2/xchatlogs/FreeNode-#ubuntu-kernel.log
停止するまで60秒ごとに上位10個のアクティブファイルを表示します。
sudo fnotifystat -t 10 60
ファイルのアクティビティを10秒ごとに6回だけ表示します。
sudo fnotifystat 10 6
thunderbirdのファイルアクティビティとプロセスID 1827を表示します。
sudo fnotifystat -p thunderbird,1827
すべてのファイル通知イベントと上位20のアクティブなアクティビティファイルを5分間の単一期間で表示します。
sudo sudo notifystat -v -d -c 5m 1
/ sysおよび/ procですべてのファイル通知イベントを表示し、定期的な統計は表示しないでください。
sudo fnotifystat -n -i /sys,/proc
詳細についてはfnotifystatのmanページを参照してください。これは非常に柔軟なツールです。