2011-08-22 58 views
2

我们的web服务器出现问题,其中越来越多的Apache进程被卡住等待文件锁定(由PHP flock()导致)以某种方式解决,但从来没有。最终,网站变得越来越慢,最终完全停止,直到Apache重新启动。如何判断当WCHAN = flock_lock_file_wait时,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是​​锁定/等候眼见?

回答

2

你将不得不使用lsof的 utiliy:

apt-get install lsof 

lsof的意思列表打开的文件。很多事情可以用它来完成,例如lsof -ni将列出打开的网络连接。为了您的Apache进程,你必须使用-p选项(PID):

lsof -p 730 

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

+0

哇,非常感谢你。对我来说是好事,lsof工具已经安装好了。不幸的是,我得到的东西对于其中一个进程来说相当长 - 包括大约六个不同的日志文件,其中一个(我相当确定)是我的锁定文件。我不认为通过查看lsof输出可以看出哪些文件可能处于“卡住”或“锁定”位置? – dvanhook

+0

http://www.netadmintools.com/html/lsof.man.html去OUTPUT,然后看看FD的NnRrWwUuXx含义,不同类型的锁 – regilero

+0

如果你认为答案是有用的,投票支持它,请提问者检查绿色标记以接受它。 – regilero

相关问题