【问题标题】:How to tell which file Apache is waiting for when WCHAN = flock_lock_file_wait当 WCHAN = flock_lock_file_wait 时如何判断 Apache 正在等待哪个文件
【发布时间】:2011-08-22 17:33:49
【问题描述】:

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

【问题讨论】:

    标签: apache ubuntu flock


    【解决方案1】:

    您必须使用 lsof 实用程序:

    apt-get install lsof
    

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

    lsof -p 730
    

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

    【讨论】:

    • 哇,非常感谢。对我来说是好事,已经安装了 lsof 实用程序。不幸的是,对于其中一个进程,我得到的东西列表很长——包括大约六个不同的日志文件,其中一个(我相当肯定)是我的锁定文件。我认为通过查看 lsof 输出无法判断哪些文件可能处于“卡住”或“锁定”位置?
    • netadmintools.com/html/lsof.man.html 去 OUTPUT 然后看 FD 的 NnRrWwUuXx 含义,不同类型的锁
    • 如果您认为答案有用,请投票,因为您是提问者,请检查绿色标记以接受它。
    • regilero - 非常感谢你(再次),我试图投票给你,但它告诉我我没有足够的声望点来做到这一点。但是,我确实认为您已经非常彻底地回答了这个问题,所以我将其标记为已回答!再次感谢您。
    猜你喜欢
    • 2019-11-14
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多