当WCHAN=flock\u lock\u file\u wait时,如何判断Apache正在等待哪个文件

当WCHAN=flock\u lock\u file\u wait时,如何判断Apache正在等待哪个文件,apache,ubuntu,flock,Apache,Ubuntu,Flock,我们的Web服务器出现了一个问题,越来越多的Apache进程在等待文件锁(由PHP flock()引起)以某种方式解决时陷入困境,但从未解决过。最终,站点变得越来越慢,最终完全停止,直到Apache重新启动 我正在研究这样一种理论,即在某种程度上,这背后隐藏着糟糕的代码,可能是在我们自己开发的磁盘缓存机制中。但我找不到它。(我们正在Ubuntu上运行。) 我的问题是,我如何知道它被卡在了什么文件上?如果我能看到挂起的地方,我就能更容易地找出坏代码在哪里。执行此命令时: ps -o pid,tt,

我们的Web服务器出现了一个问题,越来越多的Apache进程在等待文件锁(由PHP flock()引起)以某种方式解决时陷入困境,但从未解决过。最终,站点变得越来越慢,最终完全停止,直到Apache重新启动

我正在研究这样一种理论,即在某种程度上,这背后隐藏着糟糕的代码,可能是在我们自己开发的磁盘缓存机制中。但我找不到它。(我们正在Ubuntu上运行。)

我的问题是,我如何知道它被卡在了什么文件上?如果我能看到挂起的地方,我就能更容易地找出坏代码在哪里。执行此命令时:

ps -o pid,tt,user,fname,wchan -C apache2 
我明白了:

  730 ?        www-data apache2  flock_lock_file_wait  
 3085 ?        www-data apache2  flock_lock_file_wait  
 5393 ?        www-data apache2  flock_lock_file_wait  
 5397 ?        www-data apache2  flock_lock_file_wait  
11181 ?        www-data apache2  flock_lock_file_wait  
30280 ?        www-data apache2  flock_lock_file_wait   

对于我来说,有没有办法从这个角度来了解Apache锁定/等待的确切文件

您必须使用lsof实用程序:

apt-get install lsof
lsof平均值列出打开的文件。使用它可以做很多事情,
lsof-ni
将列出打开的网络连接。对于apache进程,必须使用-p选项(PID):


您将获得所有打开的文件和库(所有内容都是linux上的文件),因此显然您将获得锁定文件。

哇,非常感谢您的帮助。对我来说是件好事,lsof实用程序已经安装好了。不幸的是,对于其中一个进程,我得到的东西列表相当长——包括大约六个不同的日志文件,其中一个(我相当确定)是我的锁定文件。我不认为有什么方法可以通过查看lsof输出来判断哪些文件可能处于“卡住”或“锁定”位置?进入OUTPUT,然后查看FD的nnrrwwuuuxx含义,不同类型的锁如果你认为答案有用,请投赞成票,因为你是询问者,请检查绿色标记以接受它。regilero-非常感谢(再次)你,我曾试着投你赞成票,但它告诉我我没有足够的信誉点来这么做。然而,我确实认为你已经非常彻底地回答了这个问题,所以我将把这个标记为已回答!再次感谢你。
lsof -p 730