我有一台 SLES 10 Linux 服务器,有时 Apache 会使它的 CPU 达到 100%。
我可以ps ax
看到,Apache 已经产生了大约 50 个 Apache 进程。
例如,该命令能否ps
告诉我每个 Apache 进程正在做什么?
或者也许有其他方法可以让我查看哪些网页引发了这个问题?
答案1
我的 /etc/httpd/conf/httpd.conf 文件有以下部分:
# 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 .example.com
Allow from 127. 192.168.1.
</Location>
因此如果我去http://192.168.1.1/服务器状态,我收到一个页面,提示我:
- 服务器版本
- httpd 正常运行时间
- 当前 CPU 使用率
正在处理的请求数和闲置工人数
- 每个进程正在执行的操作的网格
近期请求
192.168.3.1 的 Apache 服务器状态
服务器版本:Apache/2.2.3 (Red Hat)
服务器构建时间:2009 年 7 月 14 日 06:04:04当前时间:2010 年 7 月 17 日星期六 10:20:31 CDT
重启时间:2010 年 7 月 17 日星期六 10:13:12 CDT
父服务器代数:0
服务器正常运行时间:7 分 19 秒
总访问次数:51 - 总流量:156 kB
CPU 使用率:u0 s0 cu0 cs0
.116 请求/秒 - 363 B/秒 - 3132 B/请求
当前正在处理 1 个请求,7 个空闲工作者__W_____................................................................
................................................................................
................................................................................
..............................................................................记分牌键:
“_”等待连接,“S”启动,“R”读取请求,
“W”发送回复,“K”保持活动(读取),“D”DNS 查找,
“C”关闭连接,“L”记录,“G”优雅完成,
“I”工作者空闲清理,“。”没有当前进程的开放插槽Srv PID Acc M CPU SS Req Conn 子槽客户端 VHost 请求
0-0 20715 0/2/2 _ 0.00 418 0 0.0 0.01 0.01 192.168.3.97 dit GET /服务器状态 HTTP/1.1
1-0 20716 0/49/49 _ 0.00 128 0 0.0 0.15 0.15 192.168.3.97 dit GET /服务器状态 HTTP/1.1 2-0
20717 0/0/0 W 0.00 0 520222374 0.0 0.00 0.00 192.168.3.97 dit GET /服务器状态 HTTP/1.1
答案2
strace
可以告诉您特定进程在系统调用级别上正在做什么,但它不会为您提供正在发生的事情的“50 英尺视图”。您需要将其使用的系统调用拼凑在一起才能弄清楚。
答案3
如果您的网站有数据库后端,那么您可以在 DBMS 中查看当前正在运行的命令。也许这可以帮助您缩小网站代码中生成负载的位置。
否则你可以增加日志级别httpd 守护进程。然后,您将在日志中获得更多信息。
答案4
您可能会发现 top 比 ps 更具信息量。