Moja sytuacja jest taka, że od czasu do czasu określony proces (w tym przypadku jest to Thunderbird) przez około minutę nie reaguje na dane wejściowe użytkownika. Dowiedziałem się, iotop
że w tym czasie zapisuje sporo na dysku, a teraz chcę dowiedzieć się, do którego pliku zapisuje, ale niestety iotop
podaje tylko statystyki na proces, a nie na otwarty plik (-descriptor).
Wiem, że mogę użyć, lsof
aby dowiedzieć się, które pliki proces jest obecnie otwarty, ale oczywiście Thunderbird ma wiele otwartych, więc nie jest to takie pomocne. iostat
pokazuje statystyki tylko na urządzenie.
Problem występuje tylko losowo i może minąć trochę czasu, zanim się pojawi, więc mam nadzieję, że nie muszę śledzić Thunderbirda i przeszukiwać długich dzienników, aby dowiedzieć się, który plik ma najwięcej zapisów.
źródło
Odpowiedzi:
Jeśli podłączysz strace do procesu w momencie, gdy się zawiesi (możesz uzyskać pid i ustawić kolejkę polecenia z góry, w wolnym terminalu), wyświetli deskryptor pliku zapisu blokującego.
Trywialny przykład:
źródło
lsof -p $PID
, aby dowiedzieć się, gdzie wskazuje deskryptor plikuls -l /proc/pid/fd
w systemie LinuxMam dostęp do roota, myślę, że najlepszym narzędziem będzie podsystem kontroli . Nie ma o tym dużo literatury (ale więcej niż o loggedfs); można zacząć od tego tutoriala lub ciągu kilku przykładów czy tylko ze
auditctl
strony człowieka . Tutaj powinno wystarczyć, aby upewnić się, że demon jest uruchomiony, a następnie uruchomićauditctl
jako root:Spowoduje to zapis do dzienników za
/var/log/audit/audit.log
każdym razem, gdy proces z pid 1234 zapisuje gdzieś pod/home/philipp
. Koszty ogólne są dość małe, dużo mniejsze niżstrace
.źródło
-S read -S write
(nieprzetestowane).