我如何才能具体确定是什么原因导致我的网络服务器变慢?

我如何才能具体确定是什么原因导致我的网络服务器变慢?

我怀疑某个大型文件或 URL 受到的攻击次数较多,但我不知道是哪个。有没有推荐的标准故障排除工具或步骤?谢谢!

答案1

如果我认为速度变慢是由于 URL 或文件流量过大造成的,我的第一反应是检查 Web 服务器日志或您可能拥有的任何分析数据。这会告诉您遇到的流量。

答案2

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

  • 另一个答案中提到,检查访问/错误日志以获取任何客户端产生比正常流量更多的流量的历史记录。如果它是一个小型网站,您可能能够手动查看日志。否则,请查看该类型日志的日志解析/可视化。
  • 如果您的服务器提供商有您的服务器的网络使用情况图表/显示,您可以将其用作粗略指南,查看是否/何时出现使用量峰值。
  • 您可以使用“ifconfig -a”查看服务器网络接口的原始使用情况。
  • 您可以使用“netstat -an”列出所有当前连接。
  • 使用 Apache/lighttpd 的状态模块(或服务器应用程序的类似模块)显示当前连接的客户端列表。
  • 不要假设问题一定与带宽有关,特别是如果日志/统计数据没有发现任何异常。
  • 考虑安装某种监控应用程序,以防问题发生时难以找到它。

以下是我使用 netstat 了解服务器上连接状态的基本方法的两个脚本。第一个脚本仅显示基于连接类型的连接数:

  #!/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 状态是正常的(至少从我的观察来看)。大量 SYN 连接可能是为了进行 SYN 泛洪 DOS 攻击。

以下脚本计算了 IP 地址已建立的连接数,有助于查看是否存在某个特定行为异常的 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 有多个条目并不一定是坏事。例如,在我的情况下,每个 IP 10-20 个条目是正常的,但超过这个数量就是可疑的。我见过“坏”IP 地址,它们要么请求相同的文档/文件 100 次,要么遍历网站上的每个文件并下载它。最后一个脚本可以相对轻松地发现这些 IP,然后您可以使用它们在日志中查找更多详细信息(如果需要)。

答案3

没有通用的方法来调试性能不佳的 Web 服务器,但有些工具应该对您有帮助。我假设您在 Linux 下使用一些 http 堆栈。

  1. 记录处理每个请求所需的时间。(在 apache 中,您可以将 LogFormat 设置为:ane,然后尝试从日志文件中确定最长的 GET 或 POST。LogFormat %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T/%D combined
  2. 可以使用 apachetop 命令进行几乎实时的日志文件分析(对于 apache 格式的日志文件,不一定由 apache 生成),apachetop -f /var/log/apache2/access.log这将为您提供有关待处理请求的良好展望
  3. 在客户端,您可以使用一些 Web 开发人员工具来确定最繁忙的站点中哪些元素加载速度太慢。我推荐使用 Firebughttp://getfirebug.com/Firefox 插件。
  4. 检查服务器的磁盘性能。使用 atophttp://www.atoptool.nl/您可以快速确定哪些磁盘处于 100% 繁忙状态。这可能会成为问题,尤其是当您在同一主机上使用数据库引擎(mysql 或 pgsql)并遇到高流量时。
  5. 大型静态文件不应该由 apache 提供。让 apache 正常工作的最佳方法是通过其他轻量级服务器(即 nginx、lighthttpd……)提供所有可以的服务。尝试找到您的 Web 服务器提供的最大文件并通过 nginx 提供它们。
  6. 还要检查带宽使用情况统计。如果达到网络限制,页面加载速度会慢很多,服务器负载也会很高。

每一个遇到过类似问题的系统管理员,可能会列举出更多快速提示,但事实是,所有这些规则都很大程度上取决于环境(硬件、操作系统、网络服务器、应用程序、数据库),并且只能通过经验来学习。通常相当痛苦。

答案4

sar考虑使用或之类的工具来监控系统Munin。这将为您提供有关哪个组件最繁忙的信息。我喜欢 Munin 的图形报告功能,以及设置警报的功能。sar 提供有关磁盘和交换活动的详细信息。

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

相关内容