如何偵測Linux中超長的檔案鎖?

如何偵測Linux中超長的檔案鎖?

我的 Linux 伺服器上有一個爭論點。多個進程之一存取單個文件,並在隨機時間鎖定該文件相當長的一段時間(> 60 秒),這反過來會導致其他事情失敗。

有沒有辦法檢測多久文件已被鎖定,是由哪個程序鎖定的?

答案1

我認為您正在尋找的是文件/proc/locks。它顯示系統中目前的檔案鎖定。這不顯示文件被鎖定多長時間,但它顯示透過哪個過程。也許您可以偵測鎖何時在此文件中註冊並測量經過的時間。範例是這樣的:

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

列所在的位置:

  • 第一的: 鎖 #。
  • 第二:鎖類型(POSIX,如果鎖是使用建立的fcntlFLOCK如果是使用flock.
  • 第三:鎖定模式(建議或強制)
  • 向前:鎖類型(WRITE或READ),對應鎖共用或排他。
  • 第五:具有鎖的進程的PID。
  • 第六:三個數字,由三個數字分隔,: 標識鎖定的檔案。
  • 第七:鎖的起始位元組。
  • 第八:鎖的結束位元組

答案2

您只需查看建立鎖定檔案時的時間戳記即可知道鎖定檔案的年齡。類似地,如果您“cat logfile.name”,它通常會將建立它的進程 ID 作為其唯一內容。

相關內容