Minha situação é que, de tempos em tempos, um processo específico (nesse caso, é o Thunderbird) não reage à entrada do usuário por um minuto ou mais. Descobri iotop
que, durante esse período, ele grava bastante no disco e agora quero descobrir em qual arquivo ele grava, mas infelizmente iotop
fornece apenas estatísticas por processo e não por arquivo aberto (-descriptor).
Eu sei que posso usar lsof
para descobrir quais arquivos o processo está aberto no momento, mas é claro que o Thunderbird tem muitos deles abertos, portanto isso não é tão útil. iostat
mostra apenas estatísticas por dispositivo.
O problema ocorre apenas aleatoriamente e pode levar algum tempo para que ele apareça, por isso espero não precisar rastrear o Thunderbird e percorrer longos logs para descobrir qual arquivo tem mais gravações.
fonte
Respostas:
Se você anexar strace ao processo exatamente quando estiver travado (você pode obter o pid e enfileirar o comando antecipadamente, em um terminal sobressalente), ele mostrará o descritor de arquivo da gravação de bloqueio.
Exemplo trivial:
fonte
lsof -p $PID
, a fim de saber para onde o descritor de arquivo apontals -l /proc/pid/fd
no LinuxSe você tem acesso root, acho que a melhor ferramenta seria o subsistema de auditoria . Não há muita literatura sobre isso (mas mais do que sobre logsfs); você pode começar com este tutorial ou um poucos exemplos ou apenas com a
auditctl
página do homem . Aqui, deve ser suficiente garantir que o daemon seja iniciado e, em seguida, executeauditctl
como root:Isso irá gravar nos logs
/var/log/audit/audit.log
sempre que o processo com o pid 1234 gravar em algum lugar abaixo/home/philipp
. A sobrecarga é bastante pequena, muito menor questrace
.fonte
-S read -S write
(não testado).