如何在linux中检测exception长的文件锁?

我在我的linux服务器上有一个争论点。 其中一个进程会访问单个文件,并在相当长的时间(> 60秒)内随机locking文件,从而导致其他问题失败。

有没有办法来检测一个文件被locking了多长时间,并通过哪个过程?

我想你正在寻找的是文件/proc/locks 。 它显示系统中当前的文件locking。 这并不显示文件被locking多长时间 ,而是显示了哪个进程 。 也许你可以检测到什么时候锁在这个文件中注册并测量经过的时间。 一个例子是这样的:

 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 

哪些列是:

  • 第一 :locking#。
  • 第二种 :lockingtypes(POSIX,如果锁是用fcntl创build的, FLOCK是用flock创build的。
  • 第三 :locking模式(ADVISORY或MANDATORY)
  • 第四 :lockingtypes(WRITE或READ),对应于共享的或独占的locking。
  • 第五 :带锁的进程的PID。
  • 第六 :三个数字分隔:表示locking的文件。
  • 第七 :锁的开始字节。
  • 第八:锁的结束字节

您可以通过查看创build时间戳的方式来告诉locking文件的年龄。 同样的,如果你使用“cat logfile.name”,它经常会拥有创build它的进程ID。