我使用 Ubuntu 6.06.2 LTS,服务器版本:Apache/2.0.55;构建时间:2010 年 8 月 16 日 18:25:39,PHP 5.1.2 (cli)(构建时间:2010 年 9 月 16 日 20:32:18)。我的所有 4 个核心都一直处于 100% 的状态,系统开始累积负载。重新启动 apache 可以暂时解决问题。我对使 CPU 保持繁忙的 apache 进程的 pid 进行了 strace。我不断收到以下消息:
gettimeofday({1285234145, 989639}, NULL) = 0
您知道这个问题出在哪里吗?
谢谢。
更新:问题出在应用程序错误导致无限循环。非常感谢大家的帮助。
答案1
如果 apache 使用线程 mpm,请使用标志 -f 进行 strace
并使用标志 -c
#strace -fcp 1268
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
-nan 0.000000 0 4 1 read
-nan 0.000000 0 1 write
-nan 0.000000 0 1 open
-nan 0.000000 0 2 close
-nan 0.000000 0 18 gettimeofday
-nan 0.000000 0 1 munmap
-nan 0.000000 0 1 writev
-nan 0.000000 0 2 poll
-nan 0.000000 0 1 mmap2
-nan 0.000000 0 2 stat64
-nan 0.000000 0 6 fcntl64
-nan 0.000000 0 29 25 futex
-nan 0.000000 0 1 accept
-nan 0.000000 0 1 getsockname
-nan 0.000000 0 1 shutdown
------ ----------- ----------- --------- --------- ----------------
100.00 0.000000 71 26 total
gettimeofday 调用非常简单。问题在于其他方面。
答案2
我以前也遇到过这个问题,但记不清是什么问题了。我隐约觉得可能是 apache 加载的某个模块出了问题。也许是 PHP、Zend Optimizer/Ion Cube。
我会检查 Ion Cube 以及您正在加载它的位置...它的加载顺序有所不同,而且我相当确定我已经看到 100% 的 CPU 负载问题(将它移动到其他 zend_extension 设置所在的位置并注释掉 apache.d/ioncube.conf 条目)。
我显然假设您正在使用 IonCube 或 Zend Optimizer,但是,也许尝试禁用它们并重新启动 apache 以查看是否发生 100% CPU 负载问题。