如何找到导致服务器崩溃的站点?

use*_*891 6 server mysql apache2

每隔几天,大约有 100 个站点就会使 VPS 崩溃。Apache 连接达到数百个,而 mysql 请求达到数百万个。这会导致 CPU 永久处于 100% 以上,并使服务器完全无法使用。重新启动可修复几天的情况。怎么找到坏人?

我已经打开了扩展状态的上帝 mod_status 但它仍然只显示最近的几个请求。不知道如何使用它来缩小 100 个站点的范围。

其余时间服务器使用 20-30% 的资源,因此它不会因站点过载。

270*_*974 2

我对您的服务器配置了解不多,但我会尽力提供帮助。

首次启动iptables并不允许攻击您的服务器

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

之后我认为这logrotate可以帮助我们找到影响力最大的网站。

安装logrotate

sudo apt-get install logrotate
Run Code Online (Sandbox Code Playgroud)

要验证 logrotate 是否已成功安装,请在命令提示符中运行此命令。

logrotate
Run Code Online (Sandbox Code Playgroud)

该实用程序的配置和默认选项logrotate位于:

/etc/logrotate.conf
Run Code Online (Sandbox Code Playgroud)

一些重要的配置设置是:旋转间隔、日志文件大小、旋转计数和压缩。

应用程序特定的日志文件信息(以覆盖默认值)保存在:

/etc/logrotate.d/
Run Code Online (Sandbox Code Playgroud)

我的想法是监控http访问文件。访问次数较多的站点必须有较大的访问日志。Logrotate并将cron关注我们并向您发送有关问题的邮件...

编辑logrotate.conf并添加一些代码

sudo nano /etc/logrotate.conf

/path_to_apache_logs/*.log {
    size 1M
    dateext
    postrotate
      /usr/bin/killall -HUP httpd
      ls -ltr /path_to_apache_logs/ | mail -s "$HOSTNAME: Apache restarted and log files rotated" name@domain.com
    endscript
}
Run Code Online (Sandbox Code Playgroud)

您必须定制

size- 日志文件的大小,根据您的需要更改 path_to_apache_logs- 根据日志路径更改路径vhost.conf

有关定制的更多信息,您可以在这里logrotate.conf找到

设置为每 5 分钟cron运行一次logrotate

*/5  *  *  *  *   root    /usr/sbin/logrotate /etc/logrotate.conf
Run Code Online (Sandbox Code Playgroud)

当您处于“攻击”状态时,您的访问日志会快速增长。Cron将运行logrotate检查日志文件大小,如果文件大小为 XX,将轮换日志,重新启动 atache 并向您发送邮件。

因为每个虚拟主机都有自己的访问文件,所以你会知道女巫网站是服务器“杀手”