Situasi saya adalah bahwa dari waktu ke waktu proses tertentu (dalam hal ini, ini Thunderbird) tidak bereaksi terhadap input pengguna selama satu menit atau lebih. Saya menemukan menggunakan iotop
itu selama ini, itu menulis cukup banyak ke disk, dan sekarang saya ingin mencari tahu file yang ditulisnya, tetapi sayangnya iotop
hanya memberikan statistik per proses dan tidak per file yang terbuka (-description).
Saya tahu bahwa saya dapat menggunakannya lsof
untuk mencari tahu file mana yang prosesnya sedang terbuka, tetapi tentu saja Thunderbird telah membuka banyak file, jadi ini tidak terlalu membantu. iostat
hanya menampilkan statistik per perangkat.
Masalahnya terjadi hanya secara acak dan mungkin butuh beberapa waktu untuk muncul, jadi saya harap saya tidak perlu strace Thunderbird dan memeriksa log panjang untuk mengetahui file mana yang paling banyak menulis.
sumber
Jawaban:
Jika Anda melampirkan strace ke proses tepat ketika itu digantung (Anda bisa mendapatkan pid dan mengantri perintah di muka, di terminal cadangan), itu akan menampilkan deskriptor file dari penulisan pemblokiran.
Contoh sepele:
sumber
lsof -p $PID
, untuk mengetahui di mana file deskriptor menunjukls -l /proc/pid/fd
di LinuxJika Anda memiliki akses root, saya pikir alat terbaik adalah subsistem audit . Tidak banyak literatur tentang itu (tetapi lebih dari tentang logf); Anda bisa mulai dengan tutorial ini atau sebuah beberapa contoh atau hanya dengan
auditctl
halaman manual . Di sini, itu harus cukup untuk memastikan daemon dimulai, kemudian jalankanauditctl
sebagai root:Ini akan menulis ke log di
/var/log/audit/audit.log
setiap kali proses dengan pid 1234 menulis di suatu tempat di bawah/home/philipp
. Biaya overhead cukup kecil, jauh lebih kecil daripadastrace
.sumber
-S read -S write
(belum diuji).