我管理的一个网站似乎每天都会在上午 12 点到 12:25 之间上线和下线。我不知道是什么原因导致了这个问题,所以我想寻求指导,看看从哪里开始。这是一个基于 Wordpress 的网站。
以下是我所知道的:
我有一个 pingdom 帐户,当网站离线时它会提醒我,这样我们就可以每天看到网站准时开启/关闭。
在网站运行/宕机时,我发现内存使用量非常大。查看网站在线/离线时的平均负载(http://screencast.com/t/BRlfXkqrbJII)。然后我运行此命令来重新启动 http(http://screencast.com/t/usVtYWZ2Qi)然后内存使用量下降到这个(http://screencast.com/t/VdTIy3bgZiQB)。在我重新启动 http 一个小时后,该网站就离线/在线了,所以重新启动 http 并没有太大的帮助。
当网站离线/在线时,我运行了 top 命令并得到了这个(http://screencast.com/t/zEwr7YQj3)。这是当站点处于最低状态时的一个 top 命令(http://screencast.com/t/eaMfha9lbT- 因此这被称为“正常”)。
我删除了服务器上的所有 cron 脚本(备份等)。我还删除了 Wordpress 安装中的每个 cron。因此理论上根本没有任何运行。
以下是带宽报告(http://screencast.com/t/AS0h2CH1Gypq)。
交通似乎没有那么多(http://screencast.com/t/s7hrWNNic1K),但看我的网站时好时坏,这可能是原因之一?
我在 Media Temple 有 dvp Nitro 包(http://mediatemple.net/webhosting/nitro/)。
因此,此时,我会请求一些帮助,试图找出造成这种情况的原因,以及如何着手查明这个问题。任何帮助都将不胜感激。
答案1
您需要查看更多日志。/var/log/messages
在午夜左右检查(也许在 /var/log /messages.0
、/var/log/messages.1
等处查看前几晚)。查看您的 http.conf 以找到您的 apache 日志存储的位置(该文件应该在 中/etc/http/conf
)。该文件中的 ErrorLog 指令将告诉您您的 apache 错误日志记录到哪里(通常是某个位置的 error_log 文件)。查看该文件以查看它在午夜左右报告的内容。检查其他文件以查找/var/log
您可以关联的异常活动。日志文件应该会告诉您 Web 服务器在午夜失败的原因。
答案2
根据您发布的“每小时点击次数”图表,您在午夜时分收到 13,000 多个请求。这是您迄今为止收到的最高请求数。当您执行“service httpd restart”时,您会看到一条警告消息,提示您的 MaxClients 超出了 ServerLimit,并且它将 MaxClients 降低到 200。这意味着您允许 200 个 httpd 客户端。您的 httpd 客户端每个消耗大约 40M。200 * 40 = 8GB。Mysql 也占用了 300MB。操作系统也需要一些。您没有配置交换。根据您发布的“top”输出,此时您的磁盘缓存为零,但有大量可用内存。这有点奇怪,让我很困惑。
Linux 可能正在实施 OOM 杀手。检查 dmesg 输出以查找这些迹象。我建议降低 MaxClients 和/或增加 RAM 数量(或可能增加 CPU 能力)。您还可以查看 apache 日志以找出此时正在访问您网站的内容。如果是合法流量,那么增加 RAM/CPU 是可行的方法。如果不是,那么缓解是可行的方法。
答案3
蜘蛛对你进行过于激进的搜索了吗?
检查您的 Apache 日志并尝试对您的 robots.txt 进行一些调整:
User-agent: BadBot
Disallow: /
干杯
答案4
您的日志在什么时间轮换?如果它们在午夜左右轮换,并且这是共享托管服务器,那么日志轮换本身可能会造成大量负载并导致您的网站瘫痪。
以下是一个可供查看的选项:i=0 while [ $i < 86400 ]; do top -b >> /tmp/top_file sleep 60 $i++ done
这将以批处理模式每分钟运行一次 top,持续一整天,并为您提供大量可能有用的信息。您需要查看 CPU 利用率、磁盘 io 利用率和内存/交换使用情况。
另外,您的托管包似乎是 VPS。也许您的 VPS 没有问题,但您的基本操作系统有问题?虚拟磁盘映像的快照式每日备份可能需要 5 分钟?