我们在Amazon x-large AWS服务器上托管了许多网站。当我重新启动apache时,我将运行 top 并查看apache进程数量(6-8),这将迅速提高cpu百分比和内存百分比高达33%cpu,有时50%cpu和每个高达1.3g的内存!他们会留在顶部 10到20分钟,然后另一个会以相同的行为启动。
如果我对其中一个进程执行 strace ,我将获得如下所示的无效列表:
access("/etc/localtime", R_OK) = 0
access("/etc/localtime", R_OK) = 0
access("/etc/localtime", R_OK) = 0
access("/etc/localtime", R_OK) = 0
access("/etc/localtime", R_OK) = 0
...
列表不会停止。如果我离开这些进程,他们最终将停止服务器,我需要重新启动整个虚拟机。
任何人都对流程为何继续访问此文件有任何想法,或者我如何找出原因发生的另一种方法?
答案 0 :(得分:2)
如果您启用mod_status
并设置ExtendedStatus on
,那么您可以访问http://server/server-status
(或您设置为使用server-status
处理程序的其他位置),您将获得每个Apache进程/线程正在做什么的表:
Srv PID Acc M CPU SS Req Conn Child Slot Client VHost Request ⋮ 3-0 2129 0/167/167 _ 1.13 495 0 0.0 0.33 0.33 ::1 Zia.metrics.net GET /mrtg/mrtg-l.png HTTP/1.1 4-0 2130 1/150/150 W 1.11 0 0 1.4 0.30 0.30 ::1 Zia.metrics.net GET /server-status HTTP/1.1 ⋮
状态页面包括完整的密钥和字段描述,以及其他一些摘要状态。你应该保护它只对你而言是可见的,而不是互联网:
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1 ::1
</Location>
ExtendedStatus On
当然,您可以使用Apache中可用的任何访问控制方法(例如,基本或摘要式身份验证)。