
Eu tenho um ponto de discórdia no meu servidor Linux. Um entre vários processos acessa um único arquivo e o bloqueia em um momento aleatório por um período considerável (>60 segundos), o que, por sua vez, faz com que outras coisas falhem.
Existe uma maneira de detectarquanto tempoum arquivo foi bloqueado e por qual processo?
Responder1
Acho que o que você está procurando é o arquivo /proc/locks
. Mostra os bloqueios de arquivos atuais no sistema. Isso não mostrahá quanto tempo um arquivo está bloqueado, mas mostrapor qual processo. Talvez você possa detectar quando o bloqueio é registrado neste arquivo e medir o tempo decorrido. Uma amostra é 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
Onde estão as colunas:
- Primeiro: trancar #.
- Segundo: tipo de bloqueio (POSIX se o bloqueio foi criado com
fcntl
eFLOCK
se criado comflock
. - Terceiro: modo de bloqueio (CONSULTIVO ou OBRIGATÓRIO)
- Adiante: Tipo de bloqueio (WRITE ou READ), correspondente a bloqueios compartilhados ou exclusivos.
- Quinto: PID do processo com bloqueio.
- Sexto: Três números separados por
:
aquele que identificou o arquivo bloqueado. - Sétimo: Byte inicial do bloqueio.
- Oitavo:Byte final do bloqueio
Responder2
Você pode saber a idade de um arquivo de bloqueio simplesmente observando o carimbo de data e hora em que ele foi criado. Da mesma forma, se você "cat logfile.name", muitas vezes ele terá, como único conteúdo, o ID do processo que o criou.