我怀疑一些特定的大文件或URL被打了很多,但我没有弄清楚它是哪一个。 是否有一些标准的故障排除工具或步骤build议? 谢谢!
那么我的第一本能,如果我认为这个速度放缓是由于一个URL或文件的stream量过大造成的,那就是检查Web服务器日志或者你可能拥有的任何分析。 这会告诉你你正在经历什么样的stream量。
如果您认为这是带宽相关的问题,可以检查几件事情:
以下是我使用两个脚本来了解使用netstat的服务器上连接状态的基本概念。 第一个只显示基于连接types的连接数量:
#!/bin/sh # Display number of connections on a server # echo -n $"Established: " netstat -an | grep ESTABLISHED | wc -l echo -n $" Syn Recv: " netstat -an | grep SYN | wc -l echo -n $" Wait: " netstat -an | grep WAIT | wc -l echo -n $" Listen: " netstat -an | grep LISTEN | wc -l echo -n $" Total: " netstat -an | wc -l
请注意,在WAIT状态下有大量的连接是正常的(至less从我所观察到的)。 大量的SYN连接可能会造成SYN Flood DOS攻击。
以下脚本通过IP地址统计已build立连接的数量,以查看是否存在某个特定的行为不当的IP地址。
#!/bin/sh # Counts the number of connections by IP address netstat -an | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
如果你的服务器负载很重,并且你有1000个连接,这个脚本可能需要一点点运行(在最坏的情况下我看到了〜1分钟)。
请注意,取决于您的应用程序,每个IP多个条目不一定是坏的。 例如,在我的情况下,10-20个条目/ IP是正常的,但超出这个数量是可疑的。 我已经看到“不好”的IP地址,要么请求相同的文件/文件100倍的时间,要么浏览网站上的每个文件并下载。 最后一个脚本使得查找这些IP变得相对容易,您可以使用它们查看日志以获取更多详细信息。
没有一般的方法来debugging不良的networking服务器的性能,但有一些工具应该对你有所帮助。 我假设你在linux下使用一些http堆栈。
LogFormat %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T/%D combined然后尝试从日志文件中确定最长的GET或POST。 apachetop -f /var/log/apache2/access.log将会给你很好的未决请求的outlook 每个系统pipe理员如果遇到过这样的问题,可能会列举更多的快速提示,但事实是,所有这些规则都非常依赖于环境(硬件,操作系统,Web服务器,应用程序,数据库),只能学习由经验。 通常相当痛苦。
考虑使用像sar或Munin这样的工具来监视系统。 这会给你提供哪些组件最繁忙的信息。 我喜欢Munin的graphics报告,也有设置警报的能力。 sar提供了有关磁盘和交换活动的详细信息。
在Apache日志中包含服务时间是有用的。 我通常在扩展日志格式中将远程日志名(ident)字段( %l )更改为服务请求( %T )所用的时间。