Apache에서 사용할 때 strace
응답이 없으면 다음과 같은 결과가 나타납니다.
[pid 13704] fcntl(57, F_SETLK, {type=F_RDLCK, whence=SEEK_SET, start=1073741824, len=1}) = -1 EAGAIN (Resource temporarily unavailable)
그게 무슨 뜻이야? 프로세스가 다시 반응하려면 어떤 종류의 잠금이 필요합니까?
답변1
fcntl(57, F_SETLK, …)
프로세스가 파일 설명자 57에서 열린 파일을 잠그려고 시도하고 있음을 의미합니다. 이 오류는 EGAIN
다른 프로세스가 이미 잠금을 차지하고 있기 때문에 잠금이 실패했음을 의미합니다. 잠금은 오프셋 1073741824에서 오프셋 1073741825까지의 파일 부분에 있습니다.
Linux에서는 다음을 사용할 수 있습니다.lslocks
어떤 잠금이 걸려 있는지 확인하세요. Apache가 기다리고 있는 잠금의 소유자가 누구인지 알아내려면 해당 잠금이 들어 있는 파일을 알아야 합니다. lsof -p $pid
그러면 fd 57에 어떤 파일이 열려 있는지 알 수 있습니다.
프로세스를 계속하려면 잠금이 필요하다고 가정하면 잠금을 소유한 다른 프로세스가 잠금을 해제할 때까지 응답하지 않습니다. 문제는 리소스를 사용할 수 없어 생성해야 하는 것이 아니라 기존 리소스가 현재 사용 중이라는 것입니다.