Significado de fcntl… F_SETLK… (Recurso temporariamente indisponível) na saída strace?

1

Quando uso strace no Apache enquanto ele não responde, recebo a seguinte saída:

[pid 13704] fcntl(57, F_SETLK, {type=F_RDLCK, whence=SEEK_SET, start=1073741824, len=1}) = -1 EAGAIN (Resource temporarily unavailable)

O que significa e que tipo de bloqueio o processo precisaria responder novamente?

    
por toastbrot888 12.05.2017 / 13:59

1 resposta

0

fcntl(57, F_SETLK, …) significa que o processo está tentando bloquear o arquivo que está aberto no descritor de arquivos 57. O erro EGAIN significa que o bloqueio falhou porque ele já foi usado por outro processo. O bloqueio é especificamente na parte do arquivo do deslocamento 1073741824 para compensar 1073741825.

No Linux, você pode usar lslocks para ver quais bloqueios estão sendo mantido. Para descobrir quem tem o bloqueio que o Apache está esperando, você precisará saber em qual arquivo ele está; lsof -p $pid dirá qual arquivo está aberto no fd 57.

Supondo que o processo precise que o bloqueio continue, ele não será responsivo até o outro processo que tenha o bloqueio liberado. O problema não é que um recurso não esteja disponível e precise ser criado, mas que um recurso existente esteja ocupado no momento.

    
por 14.05.2017 / 02:21