我怀疑某个大型文件或 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 堆栈。
- 记录处理每个请求所需的时间。(在 apache 中,您可以将 LogFormat 设置为:ane,然后尝试从日志文件中确定最长的 GET 或 POST。
LogFormat %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T/%D combined
- 可以使用 apachetop 命令进行几乎实时的日志文件分析(对于 apache 格式的日志文件,不一定由 apache 生成),
apachetop -f /var/log/apache2/access.log
这将为您提供有关待处理请求的良好展望 - 在客户端,您可以使用一些 Web 开发人员工具来确定最繁忙的站点中哪些元素加载速度太慢。我推荐使用 Firebughttp://getfirebug.com/Firefox 插件。
- 检查服务器的磁盘性能。使用 atophttp://www.atoptool.nl/您可以快速确定哪些磁盘处于 100% 繁忙状态。这可能会成为问题,尤其是当您在同一主机上使用数据库引擎(mysql 或 pgsql)并遇到高流量时。
- 大型静态文件不应该由 apache 提供。让 apache 正常工作的最佳方法是通过其他轻量级服务器(即 nginx、lighthttpd……)提供所有可以的服务。尝试找到您的 Web 服务器提供的最大文件并通过 nginx 提供它们。
- 还要检查带宽使用情况统计。如果达到网络限制,页面加载速度会慢很多,服务器负载也会很高。
每一个遇到过类似问题的系统管理员,可能会列举出更多快速提示,但事实是,所有这些规则都很大程度上取决于环境(硬件、操作系统、网络服务器、应用程序、数据库),并且只能通过经验来学习。通常相当痛苦。
答案4
sar
考虑使用或之类的工具来监控系统Munin
。这将为您提供有关哪个组件最繁忙的信息。我喜欢 Munin 的图形报告功能,以及设置警报的功能。sar 提供有关磁盘和交换活动的详细信息。
将服务时间包含在 Apache 日志中很有用。我通常会将远程日志名称 (ident) 字段 () 更改为扩展日志格式中%l
处理请求所用的时间 ( )。%T