如何在WCHAN = flock_lock_file_wait时判断Apache正在等待哪个文件

时间:2011-08-22 17:33:50

标签: apache ubuntu flock

我们的网络服务器存在问题,越来越多的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锁定/等待的确切文件?

1 个答案:

答案 0 :(得分:2)

您必须使用 lsof utiliy:

apt-get install lsof

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

lsof -p 730

你将获得所有打开的文件和库(eveything是linux上的文件),所以很明显你会得到你的锁文件。