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

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

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

我已经做了“netstat”,发现有些进程占用 DB 和网络套接字的时间太长,现在我想知道是什么脚本导致了这种情况。

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

答案1

您需要有 Apache 模块mod_status已启用(CentOs 的主 Apache 配置文件位于 /etc/httpd/conf/httpd.conf)

LoadModule status_module modules/mod_status.so

带选项ExtendedStatus on (这将在与上述相同的配置文件中设置)

# 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

并为此设置了一些访问权限(将以下内容替换XXX.XXX.XXX.XXX为您的 IP - 可以在与上述相同的配置文件中找到)

# 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>

最后,你将通过访问查看每个 HTTPD 进程正在做什么http://你的服务器名称/服务器状态

这将以所呈现的方式显示当前正在处理的 pid 和 URL这里

答案2

建议使用 mod_status 是一个很好的替代方案,可以查看当前进程正在执行什么操作,您可以启用它(通常添加允许语句以允许您从访问 Web 服务器的 IP 范围查看它),然后浏览http://site.name/server-status并获得不错的输出。Apache 自己的网站上有一个示例:http://www.apache.org/server-status

另一个有用的工具是查看进程发生了什么lsof,如果您有一个已知的 PID“挂起”,您可以键入lsof -p <pid>以查看该进程发生了什么。要匹配所有进程,您可以键入类似lsof -c apache或 的内容lsof -c httpd。它是一种非常通用的工具,有很多选项可供选择。

最后,您strace可以将其附加到正在运行的进程,以查看它们当前正在执行的系统调用等操作strace -p <pid>。警告,这有时会挂起正在运行的进程,因此请密切注意并在必要时重新启动。

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

相关内容