Files
strace 輸出中 fcntl … F_SETLK …(資源暫時不可用)的含義?
當我
strace
在 Apache 上使用時,它沒有響應,我得到以下輸出:[pid 13704] fcntl(57, F_SETLK, {type=F_RDLCK, whence=SEEK_SET, start=1073741824, len=1}) = -1 EAGAIN (Resource temporarily unavailable)
這是什麼意思,程序需要什麼樣的鎖才能再次響應?
fcntl(57, F_SETLK, …)
表示該程序正在嘗試鎖定在文件描述符 57 上打開的文件。該錯誤EGAIN
意味著鎖定失敗,因為它已被另一個程序佔用。鎖定專門針對從偏移量 1073741824 到偏移量 1073741825 的文件部分。在 Linux 上,您可以使用
lslocks
來查看正在持有哪些鎖。要查找誰擁有 Apache 正在等待的鎖,您需要知道它在哪個文件上;lsof -p $pid
會告訴你在 fd 57 上打開了什麼文件。假設程序需要鎖才能繼續,它不會響應,直到任何其他擁有鎖的程序釋放它。問題不在於資源不可用且需要創建,而是現有資源目前很忙。