
Tengo un punto de discordia en mi servidor Linux. Uno de varios procesos accede a un único archivo y lo bloquea en un momento aleatorio durante un período considerable (>60 segundos), lo que, a su vez, hace que otras cosas fallen.
¿Hay alguna manera de detectarcuánto tiempo¿Se ha bloqueado un archivo y mediante qué proceso?
Respuesta1
Creo que lo que buscas es el archivo /proc/locks
. Muestra los bloqueos de archivos actuales en el sistema. esto no se muestracuánto tiempo ha estado bloqueado un archivo, pero se notapor cual proceso. Tal vez puedas detectar cuándo se registra el bloqueo en este archivo y medir el tiempo transcurrido. Una muestra es esta:
cat /proc/locks
1: POSIX ADVISORY WRITE 2245 08:06:1182714 1073741824 1073741824
2: POSIX ADVISORY WRITE 2245 08:06:1182714 1073741826 1073742335
3: POSIX ADVISORY WRITE 3058 08:06:10752740 0 0
4: POSIX ADVISORY WRITE 3058 08:06:10752739 0 0
5: POSIX ADVISORY WRITE 2421 08:06:10752766 0 EOF
6: POSIX ADVISORY WRITE 2421 08:06:11142048 0 EOF
7: POSIX ADVISORY WRITE 2421 08:06:9964366 1073741824 1073742335
8: POSIX ADVISORY WRITE 2421 08:06:11142040 0 EOF
Donde están las columnas:
- Primero: cerrar #.
- Segundo: tipo de bloqueo (POSIX si el bloqueo se creó con
fcntl
yFLOCK
si se creó conflock
. - Tercero: modo de bloqueo (ADVISORIO u OBLIGATORIO)
- Adelante: Tipo de bloqueo (ESCRIBIR o LEER), correspondiente a bloqueos compartidos o exclusivos.
- Quinto: PID del proceso con la cerradura.
- Sexto: Tres números separados por
:
el que identifica el archivo bloqueado. - Séptimo: Byte de inicio del bloqueo.
- Octavo:Byte final del bloqueo
Respuesta2
Puede saber la antigüedad de un archivo de bloqueo simplemente mirando la marca de tiempo cuando se creó. De manera similar, si "cat logfile.name" muy a menudo tendrá, como único contenido, el ID del proceso que lo creó.