我想知道一种检查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 apache
或lsof -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