如何找到服务器崩溃的网站?

如何找到服务器崩溃的网站?

每隔几天,大概 100 个站点中就会有一个 VPS 崩溃。Apache 连接数达到几百个,mysql 请求数达到几百万个。这会导致 CPU 一直处于 100% 以上,并使服务器完全无法使用。重新启动几天后即可解决问题。如何找到罪魁祸首?

我已经将 mod_status 的扩展状态设置为 ON,但它仍然只显示最近的几个请求。不知道如何使用它来将范围缩小到 100 个站点。

其余时间,服务器仅使用 20-30% 的资源,因此不会因网站数量过多而超载。

答案1

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

首先启动iptables,不允许攻击你的服务器

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

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

安装logrotate

sudo apt-get install logrotate

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

logrotate

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

/etc/logrotate.conf

一些重要的配置设置是:rotation-interval、log-file-size、rotation-count 和 compression。

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

/etc/logrotate.d/

我的想法是监控 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" [email protected]
    endscript
}

您必须定制

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

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

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

*/5  *  *  *  *   root    /usr/sbin/logrotate /etc/logrotate.conf

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

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

相关内容