没有响应的Apache服务器

我们在专用服务器上托pipe我们的networking服务。

在高负载期间,服务器会非常频繁地返回超时错误而不是页面。

我们每天有大约17万个请求。

但是,服务器有大量的空闲内存,而且CPU目前没有加载。

我不明白为什么服务器工作不好。

我已经用tcpdump实用程序描述了这个问题。 这些是由tcpdump跟踪的好的和坏的会话。 这两个实验的要求是一样的。

Good - server returns response.

Bad - no response, time-out error.

你明白为什么这些数据会发生问题吗? 我怎样才能进一步接近错误的来源呢?

我用123.45.67.890取代了我的真实IP地址

 ---- 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响应。 天气被caching在MyISAM DB中。 世界位置数据库(INNODB)也可以通过脚本来请求。

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

平均stream量:3MBit / sec

平均包数:3300包/秒

Hoster:超棒的主机

操作系统:Ubuntu

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

这是一个链接到我们使用http://repkin5.snow.prohosting.com/apache.txt的 apacheconfiguration文件

这是服务器状态报告超时错误后立即采取。 http://repkin5.snow.prohosting.com/server-status.htm只有10个子服务器用完了120个,所以有足够的空间来处理新的请求。

高负载期间的最高程序快照。

 ------ 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 ----- 

我们有一个奇怪的行为与一个非常酷的服务器(“正常运行时间”会告诉你),但变得非常不响应。 一种检查方法是使用“netstat”,看看你有多less行。 你也可以试试Apache mod_status。 我们的问题还不是很清楚,但肯定来自外部世界,即数据中心连接。 你附近的一台机器可能正在吃掉所有的带宽,甚至在数据包到达你之前对数据包进行过滤,从而感觉到缓慢。

不知道它是否适用于你,但你显然没有高负荷的CPU,而许多Apache进程等待的东西,也许他们等待外界的答案…如果你有“萨尔”它也可以帮助。

没有被描述的是这个Web服务实际上是devise/编写的 。 经常在同时线程中运行的应用程序代码可能会形成一定程度的公共资源争用或等待一些瓶颈的后端资源。 因此,即使内存或处理器利用率可能不高,这些其他公共资源的限制也可能导致处理停顿或延迟,从而导致其他线程的及时响应。

什么应用程序平台坐在Apache的顶部来完成工作? 以及服务Web服务请求所需的最终资源点? 如果涉及后端数据库,则数据库服务器中可能会发生查询死锁。

/etc/apache2/apache.conf文件中有两个部分,分别是mpm_prefork_module和mpm_worker_module

 StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 

您可能需要根据您的环境微调这些部分以处理更多的请求。