![Apache 造成巨大的负载,如何查明原因?](https://linux22.com/image/648123/Apache%20%E9%80%A0%E6%88%90%E5%B7%A8%E5%A4%A7%E7%9A%84%E8%B4%9F%E8%BD%BD%EF%BC%8C%E5%A6%82%E4%BD%95%E6%9F%A5%E6%98%8E%E5%8E%9F%E5%9B%A0%EF%BC%9F.png)
Apache 占用了我 2 核 VPS 的 100% 以上 http://fs1.directupload.net/images/141215/g9s3t8mi.png 由于该服务器上有 50 多个站点,那么最明智的方法是什么?确定原因/站点?
我并不想一个接一个地暂停它们并等待……
有没有办法查看哪一个流量最多?
该设置是位于 statit 前面的 nginx,而 apache 使一切动态化如果您熟悉此控制面板,那么这是一个标准的 VestaCP 设置大多数网站都是 wordpress,流量很少到中等偏下。
答案1
apache 是否为每个站点记录不同的日志文件?使用“ls -latr”查看 apache 日志目录,查看哪个文件最近更新。多次执行此操作,您应该会看到相同的日志增长相对较快。然后查看该日志 ( tail -f logfilename
) 以查看受到攻击的内容。通常是对 wordpress 的暴力登录尝试;我使用自定义安全性将 wp-login.php 锁定到我自己的 ip 地址,并且我最近还开始使用 wordpress sucuri 插件来监控登录尝试。
万一有用的话,这是我在第一个“*/”之后插入到 wp-login.php 中的自定义安全性(并且需要在每次 wordpress 更新后重新安装,但有助于减少您看到的内容)
(假设我的个人计算机的 IP 地址是 11.22.33.44)
$allowed = array('11.22.33.44','127.0.0.1');
if($_SERVER["REMOTE_ADDR"]){
$ip = $_SERVER["REMOTE_ADDR"];
if(!in_array($ip, $allowed)){
print "Sorry but you do not have permission to access this page from $ip";
exit();
}
}
答案2
永远都是 WordPress!
由于其mod_php
工作方式,很难确定哪个实例导致了负载。
首先查找任何明显负载密集的网站 - 找出哪些网站的点击次数最多,查找其中任何设置了开发功能(如禁用缓存)的网站。将响应时间添加到您的日志中,并查找响应速度比其他网站慢的网站。
如果那无济于事,那么找出责任所在的最佳方法可能是切换到每个 wordpress 实例的单独进程,使用多个 fastcgi 后端和 PHP-FPM。