strace出力でfcntl ... F_SETLK ...(リソースを一時的に使用できない)とはどういう意味ですか?

strace出力でfcntl ... F_SETLK ...(リソースを一時的に使用できない)とはどういう意味ですか?

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でどのファイルが開いているかがわかります。

プロセスを続行するにはロックが必要であると仮定すると、ロックを所有している他のプロセスがロックを解除するまで応答しません。問題は、リソースが利用できないため作成する必要がなく、既存のリソースが現在使用中であることです。

関連情報