我有一台SLES 10 Linux服务器,有时甚至可以通过Apache将其最大化为100%的CPU。
用ps ax我可以看到,Apache已经产生了约50个Apache进程。
ps命令能告诉我每个Apache进程在做什么吗?
或者也许还有其他方法,以便我可以看到触发问题的网页?
我的/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/server-status ,我得到一个页面告诉我:
最近的要求
Apache服务器状态为192.168.3.1
服务器版本:Apache / 2.2.3(红帽)
服务器内置:Jul 14 2009 06:04:04
当前时间:星期六,2010年07月17日10:20:31 CDT
重新开始时间:星期六,2010年07月17日10:13:12 CDT
父代服务器生成:0
服务器正常运行时间:7分19秒
总访问量:51 – 总stream量:156 kB
CPU使用情况:u0 s0 cu0 cs0
.116次/秒 – 363次/秒 – 3132次/请求
目前正在处理1个请求,有7名空闲工人
__W _____…………………………………………. …….
………………………………………….. …………..
………………………………………….. …………..
………………………………………….. …………..
记分牌:
“_”等待连接,“S”启动,“R”读取请求,
“W”发送回复,“K”Keepalive(读取),“D”DNS查找,
“C”closures连接,“L”logging,“G”顺利完成,
“我”闲散员工的清理“。” 打开没有当前进程的插槽
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 / server-status 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 / server-status 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 / server-status HTTP / 1.1
strace可以告诉你系统调用级别的具体过程是什么,但是它不会给你一个“50英尺的视图”。 你将需要拼凑它所使用的系统调用,以便弄清楚。
如果你有一个数据库后端的网站,那么你可以在DBMS中查看当前正在运行的命令。 也许这可能会帮助你缩小网站代码中产生负载的地方。
否则你可以增加httpd守护进程的日志级别 。 那么你在日志中有更多的信息。
还有ltrace,它像strace一样工作,但有库调用。
你可能会发现比ps更多的信息。