Apache2 gettimeofday() 使 CPU 保持 100%

Apache2 gettimeofday() 使 CPU 保持 100%

我使用 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 负载问题。

相关内容