如何追踪不确定的 httpd/mysqld 活动

如何追踪不确定的 httpd/mysqld 活动

我在 Fedora 15 上运行了一个相当标准的 LAMP 堆栈,主要是为了支持一些 Drupal 网站。一切似乎都运行良好,但偶尔机器上的磁盘会开始明显比平时更吃力。我有限的系统调试技能发现了这一点:

  • 'top' 报告说 httpd 和 mysqld 确实处于活动状态,占用了大部分空闲机器的 3-4%。

  • httpd 日志文件中没有任何变化,其他系统日志中也没有出现任何异常。因此,“有人在访问你的网站,笨蛋”这个显而易见的答案似乎并非如此。

  • 使用“apachectl graceful”重置 httpd 没有任何效果。但是,使用“apachectl stop”后再使用“apachectl start”通常可以让机器平静下来 — 磁盘搅动停止。

  • 我相信这台机器是安全的;我没有理由相信有任何黑客行为正在发生。(当然,我想通常都是这样……)

如果有人能告诉我发生了什么,我会感到惊讶(但很高兴!),但是有没有什么建议可以让我更深入地了解机器并弄清楚发生了什么?谢谢!

答案1

偶尔是什么?您应该设置一个 cron 作业来访问 /cron.php,由它来执行 Drupal 的日常工作。

检查crontab -lroot 用户或 apache(或 www-data)用户,看看是否有可以与磁盘活动关联的 cron 作业。cron 作业也可能位于 /etc/cron.d/drupal.cron(或某些此类文件)下。您应该在 Apache access_log 中看到这些 /cron.php 请求,因此我假设“httpd 日志文件中没有更改”是指没有外部请求,而不是字面上没有更改。

将来您应该在您的服务器上收集指标(例如 Cacti、Munin),这样您就可以知道什么是正常的,什么是不正常的。

答案2

此行为可能与物理内存耗尽以及内核使用交换一致。检查以下输出:

free -g
free -m

如果在活动增加时运行此命令并且它显示交换正在被使用(即已用列中的值大于 0)那么我很确定添加一点内存会有所帮助。

但是,如果您的内存少于 1 GB,我无论如何都会升级内存。

还可以考虑安装 sysstat 包(在 debian 和 redhat 中以此方式命名),“sar”命令对于找出瓶颈非常有用。

答案3

找到了——毕竟它与 Drupal cron 有关。该网站是新网站,有大量内容需要通过 cron 处理(索引大量节点)。由于某种(未知)原因,索引过程陷入困境并不断重新启动。结果,索引器疯狂运行(因此磁盘活动),但日志文件中没有任何问题的证据,因为 crontab 对 cron.php 的调用(最终)会完成并显示在日志中。

无论如何,一旦我稍微调整了一下索引过程并控制住它,cron 就会顺利运行,一切似乎都很好。感谢大家的建议!

相关内容