我们的网络服务器存在问题,越来越多的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锁定/等待的确切文件?
答案 0 :(得分:2)
您必须使用 lsof utiliy:
apt-get install lsof
lsof表示打开文件。可以使用它做很多事情,lsof -ni
将列出打开的网络连接。对于您的apache进程,您必须使用-p选项(PID):
lsof -p 730
你将获得所有打开的文件和库(eveything是linux上的文件),所以很明显你会得到你的锁文件。