我们在专用服务器上托pipe我们的networking服务。 在高负载期间,服务器会非常频繁地返回超时错误而不是页面。 我们每天有大约17万个请求。 但是,服务器有大量的空闲内存,而且CPU目前没有加载。
我不明白为什么服务器工作不好。
我已经用tcpdump实用程序描述了这个问题。 这些是由tcpdump跟踪的好的和坏的会话。 这两个实验的要求是一样的。 良好 – 服务器返回响应。 坏 – 没有反应,超时错误。
你明白为什么这些数据会发生问题吗? 我怎样才能进一步接近错误的来源呢?
我用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量:2.5MBit /秒
平均包数: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在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 -----
你的MySQL服务器似乎正在努力(但不是在你的屏幕截图),因为高CPU时间。 通过发出SHOW PROCCESSLIST;检查运行哪些查询SHOW PROCCESSLIST; 在MySQL提示符下。
也尝试激活Apache中的服务器状态页面。 使用ExtendedStatus On它会给你提供哪些页面正在加载的信息,你可以看到在Apache中有多less个开放的“槽”。
Apache mpm-prefork中的默认值是最多有大约250个进程,这意味着您可以处理250个同时文件下载。 如果您有许多访客,这可能会造成很多麻烦,特别是如果您启用了KeepAlive 。 你会看到你的服务器状态页面,如果这是你的问题。
有一整个主机(< – 双语)的原因为什么Apache可能没有响应。 作为一个起点,我会看看服务器状态,假设你已经启用了mod_status ,看看有多less进程正在运行以及它们是否看起来忙碌。 如果事实certificate您有subprocess问题,则此页面是查看可以尝试的事情的好地方。
顶部的屏幕截图显示了你的MySQL服务器并不努力工作! (对不起埃米尔 – 但你需要更仔细地阅读,或了解更多有关顶部)。
而且只有8个Apache进程列出。
负载平均值为0.2,CPU闲置93% – 这台机器什么都不做。
发布的链接中缺less一半的configuration,但看起来像预分支。
我的第一个猜测是,MaxServers被设置为10(根据你的应用程序的样子,它应该在100-200的区域)一些古怪的价值。
你可能也想检查一些愚蠢的东西,比如反向查找传入的连接或者安装了mod_ident(确定这些并不总是愚蠢的 – 但是应该用于极度的困扰)。
当然,安装mod_status并启用扩展状态将会更好地了解这里发生了什么。
C。
卡尔B是正确的Apache状态页面会帮助你很多。 检查请求是否未logging在错误日志中。 这可能是活动请求的数量达到了在Apacheconfiguration文件中指定的最大数量。 查看MaxClients是否大于:
sudo netstat -tnp|egrep -c 'apache|http'
你可以尝试砰ping(ping -f)服务器吗? 我猜想有一些关于networking连接的硬件问题,因为你的服务器似乎没有足够快地回答SYN数据包。