CPU 使用率过高导致服务器崩溃

CPU 使用率过高导致服务器崩溃

没有想法可以探索。首先,我要警告你,我是一名程序员,不是系统技术人员 :)

情况如下。

专用服务器(LAMP)运行大量站点。mySQL 服务器位于单独的机器上。

过去几周,性能一直在稳步下降,以至于我甚至无法远程进入盒子。

查看 mod_status,发现有相当多的进程占用了 CPU 资源。但是,URL 各不相同……没有共同的模式 - 因此我无法将问题缩小到可能卡住的特定脚本。

PHP 作为 cgi 运行。

大多数需要一段时间才能运行的网站都使用了 cakephp 框架

重新启动服务器,几分钟内我们又瘫痪了……

遇到一个错误,说 /var/tmp/ 已满,无法写入会话。但是,还有空间?可能是缺少 inode?目前正在让某人走到盒子旁边并清除 tmp。

缺乏写入会话的能力是否会导致 php 进程永远挂起,并最终堵塞一切?

还有什么其他想法我想探索吗?我一直在监视 SQL 服务器,看它是否在任何查询中返回大量数据集,但其中没有什么值得注意的...

现在才上午 11:21,我就需要喝点东西了 :)

答案1

我认为这是一个记忆问题。

  1. Apache 占用了大量的 RAM。

  2. PHP 也存在大量内存泄漏。您应该将其配置为在处理少量请求(100 是一个不错的数字)后重新启动其工作线程。在 /etc/init.d/php-cgi(或类似文件)中查找“PHP_FCGI_MAX_REQUESTS=20”行...这是限制。还为子进程数设置一个合理的限制,如“PHP_FCGI_CHILDREN=15”。如果可能,我还建议您使用 php-fpm,它更稳定,内存泄漏更少。

去做:

  1. 尝试在系统日志 (/var/log/syslog 或 /var/log/messages,取决于发行版) 中查找已终止的进程。可能会有这样的提示。
  2. 要找出问题所在,请尝试使用“atop”(进程监视器,类似 top,但功能更多)并按“p”,这样会按进程名称累积所有统计信息。查看是什么占用了 RSIZE。

答案2

您确实需要从盒子内部而不是外部来查看,看看正在消耗什么资源。

我的猜测是 apache 的进程池已耗尽(因此没有人可以连接)或物理内存已耗尽(因此性能急剧下降)。

相关内容