如何跟踪和调试悬挂的apache进程

swe*_*edo 5 php mysql apache trace dtrace

我无法弄清楚我的PHP后端有问题。请求API(PHP代码返回json)时,我遇到了一些apache进程的间歇性“挂起”现象。

Apache永远不会传递文件(html,css,js等),只是触发问题的API调用数量有限。该请求在Chrome开发者工具的“网络”标签apachectl restart中处于待处理状态,即使我运行,重启后请求仍处于待处理状态。我看到httpd运行时所有进程都不会停止apachectl stop。我必须杀了他们killall -9 httpd

发生问题时,我必须停止Apache,杀死所有httpd进程,然后再次启动apache。如果我不重新启动,大多数API调用将挂起(可能是分配给挂起的子进程的调用)。

触发问题的API调用全部包括对MySQL的调用。

检查mysql服务器上的进程列表,连接已建立但处于SLEEP状态。

这个问题听起来像是代码问题还是配置问题?

错误日志(mysql和apache)未显示任何内容,所以我想我应该尝试stracedtruss在Mac上)apache进程。我怎么做?

-

环境:

  • OS X 10.10.2优胜美地
  • Apache / 2.4.9(Unix)-与os x一起安装
  • MySQL 5.6.22(Homebrew)-innodb,mysqli接口,非持久连接
  • PHP 5.6.5(自制)-php56,mcrypt,php56-mcrypt,php56-apcu,php56-xdebug