为什么 Web 服务器会无响应?

为什么 Web 服务器会无响应?

我们的网络服务托管在专用服务器上。在高负载期间,服务器经常返回超时错误而不是页面。我们每天有大约 170,000 个请求。但是,服务器有大量可用内存,并且 CPU 目前没有负载。

我不明白为什么服务器运行不佳。

我已经使用 tcpdump 实用程序分析了问题案例。这些是 tcpdump 跟踪到的良好和不良会话。两个实验中的请求相同。良好 - 服务器返回响应。不良 - 无响应,超时错误。

从这些数据中,您能看出问题发生的原因吗?我该如何进一步接近错误根源?

我已将我的真实 IP 地址替换为 123.45.67.890

---- Bad ----
12:23:36.366292 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:39.362394 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:45.365567 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,nop,sackOK>
--------

---- Good ----
12:27:07.632229 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620946 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620969 IP myserver.superbservers.com.www > 123.45.67.890.63914: S 2654770980:2654770980(0) ack 3581365571 win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 6>
12:27:10.838747 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 1 win 4380
12:27:10.957143 IP 123.45.67.890.63914 > myserver.superbservers.com.www: P 1:213(212) ack 1 win 4380
12:27:10.957152 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 213 win 108
12:27:10.965543 IP myserver.superbservers.com.www > 123.45.67.890.63914: P 1:630(629) ack 213 win 108
12:27:10.965621 IP myserver.superbservers.com.www > 123.45.67.890.63914: F 630:630(0) ack 213 win 108
12:27:11.183540 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 631 win 4222
12:27:11.185657 IP 123.45.67.890.63914 > myserver.superbservers.com.www: F 213:213(0) ack 631 win 4222
12:27:11.185663 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 214 win 108
--------

服务详情。

这是一项天气报告服务。它用 Perl 编写,由 MySQL 支持。该脚本使用了多个模块(来自 CPAN 和我们自己的模块)。

代码相对简单。脚本从另一台服务器下载天气数据,转换数据格式并返回 XML 响应。天气数据缓存在 MyISAM DB 中。还有一个世界位置数据库 (INNODB),也可以通过脚本请求。

这些是在高负载期间采取的指标。

平均流量:2.5MBit/秒

平均数据包数:3300 包/秒

主办方:SuperbHosting

操作系统:Ubuntu

服务器参数:E6300 CONROE 1.86GHZ 2 X 1MB CACHE 1066 1GB DDR2 667MHZ

这是我们使用的 apache 配置文件的链接 http://repkin5.snow.prohosting.com/apache.txt

这是高负载时的服务器状态报告 http://repkin5.snow.prohosting.com/server-status.htm 120 个子服务器中只有 10 个正在运行,因此有足够的空间来处理新的请求。

高负载期间的热门程序快照。

------
top - 13:21:29 up 15 days, 18:36,  1 user,  load average: 0.18, 0.19, 0.21
Tasks: 137 total,   1 running, 136 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.8%us,  1.2%sy,  0.0%ni, 92.8%id,  0.7%wa,  0.0%hi,  3.5%si,  0.0%st
Mem:   1033904k total,   590620k used,   443284k free,     6892k buffers
Swap:  3028212k total,    82556k used,  2945656k free,    64156k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 4252 mysql     20   0  162m  48m 3352 S    1  4.8 279:01.27 mysqld
14503 www-data  20   0 43280  14m 3824 S    1  1.4   0:00.16 apache2
14577 www-data  20   0 43012  13m 3500 S    1  1.4   0:00.06 apache2
14401 www-data  20   0 45076  17m 4340 S    0  1.8   0:00.46 apache2
14414 www-data  20   0 45516  18m 4344 S    0  1.8   0:00.47 apache2
14420 www-data  20   0 45624  18m 4372 S    0  1.8   0:00.61 apache2
14421 www-data  20   0 45488  18m 4352 S    0  1.8   0:00.42 apache2
14496 www-data  20   0 44820  17m 4328 S    0  1.7   0:00.18 apache2
14510 www-data  20   0 45216  17m 4300 S    0  1.8   0:00.62 apache2
    1 root      20   0  2844  456  404 S    0  0.0   0:05.24 init
    2 root      15  -5     0    0    0 S    0  0.0   0:00.00 kthreadd
    3 root      RT  -5     0    0    0 S    0  0.0   0:00.24 migration/0
    4 root      15  -5     0    0    0 S    0  0.0  32:28.85 ksoftirqd/0
    5 root      RT  -5     0    0    0 S    0  0.0   0:00.77 watchdog/0
    6 root      RT  -5     0    0    0 S    0  0.0   0:00.15 migration/1
    7 root      15  -5     0    0    0 S    0  0.0   0:03.07 ksoftirqd/1
    8 root      RT  -5     0    0    0 S    0  0.0   0:00.63 watchdog/1
-----

答案1

您的 MySQL 服务器似乎有时会很忙(但您的屏幕截图中没有),因为 CPU 时间过长。通过SHOW PROCCESSLIST;在 MySQL 提示中发出命令来检查运行了哪些查询。

还可以尝试激活服务器状态Apache 中的页面。ExtendedStatus On它将为您提供有关当时正在加载哪些页面的信息,并且您可以看到 Apache 中还剩下多少个开放的“插槽”。

Apache mpm-prefork 中的默认设置是最多有大约 250 个进程,这意味着您可以处理 250 个同时的文件下载。如果您有很多访问者,这可能会造成很多麻烦,特别是如果您已经KeepAlive激活了。您会在服务器状态页面中看到这是否是您的问题。

答案2

Apache 不响应的原因有很多(<--pun)。首先,我会查看 server-status,假设您有mod_status启用并查看有多少个进程正在运行以及它们是否看起来很忙。这一页如果您发现有子进程问题,则是一个很好的首选地点来查看您可以尝试哪些方法。

答案3

上面的截图显示你的 MySQL 服务器根本没有努力工作!(对不起 Emil - 但你需要更仔细地阅读或了解更多有关 top 的信息)。

并且仅列出了 8 个 Apache 进程。

平均负载为 0.2,CPU 空闲率为 93% – 这台机器处于无任何运行状态。

发布的链接中缺少一半的配置,但它看起来像是预先分叉的。

我的第一个猜测是 MaxServers 被设置为一些古怪的值,如 10(取决于您的应用程序的样子,它应该在 100-200 的范围内)。

你可能还想检查一些愚蠢的东西,比如对传入连接的反向查找或安装的 mod_ident(好吧,这些都不是总是愚蠢——但应极其谨慎地使用。

当然,安装 mod_status 并启用扩展状态将会更好地了解这里发生的情况。

C。

答案4

您可以尝试对服务器进行泛洪 ping (ping -f) 吗?我猜想网络连接存在一些硬件问题,因为您的服务器似乎无法足够快地响应 SYN 数据包。

相关内容