¿Cómo detectar bloqueos de archivos excepcionalmente largos en Linux?

¿Cómo detectar bloqueos de archivos excepcionalmente largos en Linux?

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 fcntly FLOCKsi se creó con flock.
  • 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ó.

información relacionada