我们在专用服务器上托管我们的网络服务。
在高负载期间,服务器频繁返回超时错误而不是页面。
我们每天有大约 170,000 个请求。
但是,服务器目前有大量可用内存并且 CPU 没有负载。
我不明白为什么服务器运行不佳。
我已经使用 tcpdump 实用程序分析了问题案例。这些是 tcpdump 跟踪的良好和不良会话。两个实验中的请求相同。
Good - server returns response.
Bad - no response, time-out error.
从这些数据中,您能看出问题发生的原因吗?我该如何进一步接近错误根源?
我已将我的真实 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),也可以通过脚本请求。
这些是在高负载期间采取的指标。
平均流量:3MBit/秒
平均数据包数: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
我们有时会遇到服务器的奇怪行为,它非常酷(“正常运行时间”会告诉你),但变得非常不响应。一种检查方法是使用“netstat”,看看有多少行。你也可以试试 Apache mod_status。我们的问题仍然不是很清楚,但它肯定来自外部世界,即数据中心连接。你附近的一台机器可能会占用所有带宽,甚至在数据包到达你之前对其进行过滤,因此你感觉到速度很慢。
不确定它是否适用于您,但显然您的 CPU 负载并不高,而许多 Apache 进程正在等待某些东西,也许它们正在等待外部的答案...如果您有“sar”,它也可以提供帮助。
答案2
尚未描述的是该 Web 服务实际上是什么设计/编写用于做。同时运行线程中的应用程序代码通常会形成一定程度的公共资源争用或等待某些瓶颈后端资源。因此,即使内存或处理器利用率可能不高,这些其他公共资源的限制也可能使其他线程的处理停滞或延迟,从而影响其及时响应。
Apache 上有哪些应用平台可以完成工作?以及为 Web 服务请求提供服务所需的最末端资源点?如果涉及后端数据库,则数据库服务器中可能会出现查询死锁。
答案3
/etc/apache2/apache.conf 文件中有 mpm_prefork_module 和 mpm_worker_module 两个部分
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
您可能需要根据您的环境微调这些部分以处理更多请求。