我怎样才能确定是什么导致我的networking服务器变慢?

我怀疑一些特定的大文件或URL被打了很多,但我没有弄清楚它是哪一个。 是否有一些标准的故障排除工具或步骤build议? 谢谢!

那么我的第一本能,如果我认为这个速度放缓是由于一个URL或文件的stream量过大造成的,那就是检查Web服务器日志或者你可能拥有的任何分析。 这会告诉你你正在经历什么样的stream量。

如果您认为这是带宽相关的问题,可以检查几件事情:

  • 在另一个答案中提到检查访问/错误日志来获取创build更多的stream量比任何客户端的历史logging。 如果它是一个小网站,您可能可以手动查看日志。 否则,查看该日志types的日志parsing/可视化。
  • 如果您的服务器提供商为您的服务器提供了networking使用情况图表/显示,则可以将其用作粗略指南,以查看是否/何时出现任何尖峰使用情况。
  • 您可以使用''ifconfig -a''来查看服务器networking接口的原始用法。
  • 您可以使用''netstat -an'列出所有当前的连接。
  • 使用Apache / lighttpd(或服务器应用程序的类似模块)的状态模块来显示连接客户端的当前列表。
  • 不要以为这个问题必然与带宽有关,尤其是如果没有什么东西突出显示为日志/统计的exception。
  • 考虑安装某种监控应用程序,以防发生问题时很难find问题。

以下是我使用两个脚本来了解使用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堆栈。

  1. logging处理每个请求所需的时间。 (在Apache中,您可以将LogFormat设置为: LogFormat %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T/%D combined然后尝试从日志文件中确定最长的GET或POST。
  2. 几乎实时的日志文件分析可以使用apachetop命令(对于apache格式的日志文件,不一定是由apache生成) apachetop -f /var/log/apache2/access.log将会给你很好的未决请求的outlook
  3. 在客户端,您可以使用一些web开发人员的工具来确定最繁忙的站点的哪些元素正在缓慢加载。 我build议firefox的firebug http://getfirebug.com/插件。
  4. 检查服务器的磁盘性能。 在http://www.atoptool.nl/上使用,您可以快速确定哪些磁盘100%繁忙。 这可能是一个问题,特别是当你在同一台主机上使用数据库引擎(mysql或pgsql)时,遇到高stream量。
  5. 大的静态文件不应该由Apache服务。 让Apache运行良好的最好方法是通过其他轻量级服务器(即nginx,lighthttpd …)为您提供所有服务。 尝试find您的networking服务器提供的bigest文件,并通过nginx提供。
  6. 请检查带宽使用情况统计信息。 如果你达到你的networking限制,页面会得到更慢的负载,服务器将获得高负载。

每个系统pipe理员如果遇到过这样的问题,可能会列举更多的快速提示,但事实是,所有这些规则都非常依赖于环境(硬件,操作系统,Web服务器,应用程序,数据库),只能学习由经验。 通常相当痛苦。

考虑使用像sarMunin这样的工具来监视系统。 这会给你提供哪些组件最繁忙的信息。 我喜欢Munin的graphics报告,也有设置警报的能力。 sar提供了有关磁盘和交换活动的详细信息。

在Apache日志中包含服务时间是有用的。 我通常在扩展日志格式中将远程日志名(ident)字段( %l )更改为服务请求( %T )所用的时间。