查找每个HTTPD进程上运行的PHP脚本

我想知道一种检查HTTPD进程的方法来查找哪个PHP脚本正在运行。

我已经做了一个“netstat”,发现一些进程持有DB和networking套接字太长,现在我想知道是什么脚本造成的。

顺便说一句,我正在使用Linux。

您需要启用Apache模块mod_status (CentOs主Apacheconfiguration文件位于/etc/httpd/conf/httpd.conf)

 LoadModule status_module modules/mod_status.so 

选项ExtendedStatus on (这将被设置在与上面相同的configuration文件中)

 # ExtendedStatus controls whether Apache will generate "full" status # information (ExtendedStatus On) or just basic information (ExtendedStatus # Off) when the "server-status" handler is called. The default is Off. # ExtendedStatus On 

以及为此设置的一些访问权限(使用您的IPreplace为XXX.XXX.XXX.XXX下的内容) – 这可以在与上面相同的configuration文件中find)

 # Allow server status reports generated by mod_status, # with the URL of http://servername/server-status # Change the ".example.com" to match your domain to enable. # <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from localhost 127.0.0.1 XXX.XXX.XXX.XXX </Location> 

最后,你将通过访问http:// your-server-name / server-status来确定每个HTTPD进程正在做什么

这将显示当前正在处理的pid和URL。

build议的mod_status是一个很好的select,看看目前正在做什么的进程,你启用它(通常添加Allow语句,允许你从你访问Web服务器的IP范围查看它),然后浏览到http://site.name/server-status并获得很好的输出。 在Apaches自己的网站上可以看到一个例子: http : //www.apache.org/server-status

另一个有用的工具,看看进程是怎么回事,如果你有一个已知的PID“挂起”,你可以inputlsof -p <pid>来查看这个进程是怎么回事。 要匹配所有进程,你可以input类似lsof -c apachelsof -c httpd 。 它是一个非常灵活的工具,有很多select你想看到的。

最后,你可以通过系统调用等手段来查看正在执行的进程,比如strace -p <pid> 。 警告,这个CAN有时会挂起正在运行的进程,所以请保持眼睛打开并在需要时重新启动。

lsof(8)手册页: http : //linux.die.net/man/8/lsof
strace(1)手册页: http : //linux.die.net/man/1/strace