2

我们的网络服务器出现问题,越来越多的 Apache 进程卡住等待文件锁定(由 PHPflock() 引起)以某种方式解决,但从未解决。最终站点变得越来越慢,最后完全停止,直到 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 锁定/等待的确切文件吗?

4

1 回答 1

2

您必须使用lsof实用程序:

apt-get install lsof

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

lsof -p 730

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

于 2011-08-23T10:00:58.197 回答