运行 Drupal 站点的这个 Apache/MySQL 服务器(Debian 8)表现出奇怪的行为:
总是有一个 Apache 进程正在运行,其 CPU 利用率为 100%(根据 htop)。每四分钟(约 240 秒),该进程终止,并且另一个 Apache 进程立即跳转到顶部,CPU 利用率为 100% - 持续四分钟。
查看 Apache 的错误日志,终止的进程列出了 PHP 致命错误“超出最大执行时间 240 秒”:
[:error] [pid 31280] [client 185.17.206.72:55628] PHP 致命错误:/var/www/drupal/modules/field/field.attach.inc 第 328 行的执行时间超过了 240 秒
这种模式在工作时间持续存在。夜间,当网站上的访问者较少时,错误消息出现的频率就会降低。
该系统有五个核心(一个 VM),正在运行 Apache 2.4、PHP 5.6、Percona 5.6 和 Drupal 7。我运行了带有慢查询日志的 MySQL,但没有与这些频繁的 PHP 超时相匹配的慢查询。
我对几个 CPU 利用率为 100% 的 Apache 进程运行了 strace,但没有发现什么特别突出的问题:该进程每隔几分钟就会在轮询中停止几秒钟。但这似乎是正常现象。
并不缺少 DB 连接(例如根据 mysqltuner 和 tuningprimer)。
查看与这些超时相对应的请求(我使用了带有 PID 和完成请求所花费时间的日志格式:)LogFormat "%h %l %u %t %>s %D %P \"%r\" %b" exectime
,我看不到任何模式:它发生在各种不同的请求中,这些请求通常在 1 秒或更短的时间内完成。
我只是想知道这些连续的 PHP 错误是怎么回事,我该如何解决它们。关于如何进一步分析这个问题,您有什么想法吗?