Mi situación es que de vez en cuando un proceso específico (en este caso, es Thunderbird) no reacciona a la entrada del usuario durante un minuto más o menos. Descubrí que usando iotop
eso durante este tiempo, escribe bastante en el disco, y ahora quiero saber en qué archivo escribe, pero desafortunadamente iotop
solo proporciona estadísticas por proceso y no por archivo abierto (descriptor).
Sé que puedo usar lsof
para averiguar qué archivos ha abierto actualmente el proceso, pero, por supuesto, Thunderbird tiene muchos de ellos abiertos, por lo que esto no es tan útil. iostat
solo muestra estadísticas por dispositivo.
El problema se produce solo al azar y puede tardar bastante tiempo en aparecer, por lo que espero no tener que atravesar Thunderbird y recorrer largos registros para averiguar qué archivo tiene la mayor cantidad de escrituras.
fuente
Respuestas:
Si adjunta strace al proceso justo cuando está colgado (puede obtener el pid y poner en cola el comando por adelantado, en un terminal de repuesto), mostrará el descriptor de archivo de la escritura de bloqueo.
Ejemplo trivial:
fuente
lsof -p $PID
, para saber dónde apunta el descriptor de archivols -l /proc/pid/fd
en LinuxSi tiene acceso de root, creo que la mejor herramienta sería el subsistema de auditoría . No hay mucha literatura al respecto (pero más que sobre los logfs); usted puede comenzar con este tutorial o un par de ejemplos o simplemente con la
auditctl
página de manual . Aquí, debería ser suficiente para asegurarse de que se inicia el demonio, luego se ejecutaauditctl
como root:Esto escribirá en los registros
/var/log/audit/audit.log
cada vez que el proceso con pid 1234 escriba en algún lugar debajo/home/philipp
. La sobrecarga es bastante pequeña, mucho más pequeña questrace
.fuente
-S read -S write
(no probado).