我正在运行一个有大约60个网站的Linux服务器,在重负载下崩溃。 有一个简单的方法来查看哪个Apache虚拟主机获得最多的stream量?
确保在你的apache模块中加载了mod_status.so然后在httpd.conf中查找/添加上面的代码:
# Uncomment the following lines to enable mod_status support: # ExtendedStatus On <Location /server-status> SetHandler server-status Order Deny,Allow Deny from all Allow from YOUR_IP_HERE </Location>
这将允许您查看您的http服务器中正在使用的加载域的所有页面。
要使用http:// your_ip / server-status访问它,只有在Allow from YOUR_IP_HERE定义的IP才能查看它。
除此之外,像推荐我会使用netstat,服务器日志和mod_backdoor (用于从apache获取信息,太不能正常响应)。
采取从mod_backdoor.txt
要编译/安装mod_backdoor,请执行以下操作:
# apxs -c mod_backdoor.c # apxs -i mod_backdoor.la
要启用mod_backdoor,请在conf文件中添加如下内容:
loadmodule backdoor_module modules/mod_backdoor.so <IfModule mod_backdoor.c> BackdoorAddress 127.0.0.1:65535 </IfModule>
虽然下面的控件与上面显示的BackdoorAddress是多余的,但它可能是有用的。 您可以为BackdoorAddress指定0.0.0.0:port,然后使用mod_access指令来控制哪些客户端可以使用后门。
<VirtualHost 127.0.0.1:65535> <location /> order deny,allow allow from 127.0.0.1 deny from all </location> </VirtualHost>
过去,对于单个站点的框,我已经使用了wtop / logrep 。 我看不出有什么理由不能扩展到多个站点,并且支持可以过滤的url字段。
要添加到MikeR的build议wtop / logrep的答案,您可以获得每个域的请求(15个最需要的域):
logrep -o 'count(*),domain' -s 15:1:d access.log
您还可以在tail模式下使用logrep ,这对于简化数据并使模式更易于logrep :
logrep -m tail -o 'msec,method,status,domain,refdom,uas' access.log
如果上面看起来可能有帮助,那么也检查“class”。
取决于你的设置。 每个VirtualHost都有自己的IP吗? 我想可能不会,所以我会检查进入netstat进程,看看是否有一个IP,它击中你的服务器,导致一些DDOS:
netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
用类似的方式parsingapache访问日志: http : //awstats.sourceforge.net/
或者使用ngrep :
sudo ngrep -qp 'GET|POST' port 80
最近我们的Web服务器被220%的mysqld CPU峰值所瘫痪。 我们使用mytop来匹配CPU中的“尖峰”,查询正在运行,并缩小了肇事者的网站。
如果涉及mysql,那么查看慢速查询日志 ,可能会帮助您find缓慢的查询,然后您可以使用“ EXPLAIN ”来帮助您优化它们。