我怎样才能找出我的服务器上的哪个网站正在stream量淹没?

我正在运行一个有大约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 ”来帮助您优化它们。