尽管 CPU 使用率很低,Apache 仍无法处理请求

尽管 CPU 使用率很低,Apache 仍无法处理请求

我正在对运行 Amazon Linux 的 m3.medium ec2 实例上的 LAMP 堆栈中的 apache 服务器进行调整。

几周前,mysql 开始一直崩溃,似乎是 apache (2.2) 的内存问题导致了这个问题。我们做了一些分析,并将配置更改为更少的服务器数量。这解决了 mysql 问题,但在圣诞节期间,流量水平要低得多,从那时起,我们一直在逐渐增加服务器数量,以尝试找到服务器的最佳水平。

Apache 现在表现出一种意外的行为。经过一段时间后,需要很长时间才能处理新请求(几分钟),当我检查 top 等时,当这种情况发生时,CPU 使用率可能低至 0%,但总是很低,就像 Apache 什么也没做一样。top 读数中有一堆 Apache 进程,但它们似乎什么也没做。我尝试关闭 KeepAlive 以防它们被这样束缚,但没有任何变化。

我们仍在使用 prefork MPM(正在设置新服务器以更改此设置)配置如下

StartServers       10
MinSpareServers    10
MaxSpareServers   30
ServerLimit      40
MaxClients       40
MaxRequestsPerChild  2000

KeepAlive Off

有人能帮我了解发生了什么吗?我对 Apache 的了解太有限,无法理解哪里出了问题,但我的直觉告诉我,apache 进程不知何故被束缚住了。我尝试查看 mod_status,但在这种情况下它不起作用,因为请求在那里等待 apache 响应。目前,我不得不定期重置 apache,这远非理想。我在下面提供了一些监控输出,希望它们能让我了解发生了什么或下一步应该查看什么。

非常感谢。

免费输出:

             total       used       free     shared    buffers     cached
Mem:          3578       3481         96          0         22        550
-/+ buffers/cache:       2909        669
Swap:         1023        226        797

顶部输出

top - 10:35:15 up 12 days, 14:14,  2 users,  load average: 0.00, 0.00, 0.00
Tasks: 189 total,   1 running, 188 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3664028k total,  3559768k used,   104260k free,    21076k buffers
Swap:  1048572k total,   232500k used,   816072k free,   559268k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
19973 apache    20   0 1042m 346m 271m S  0.0  9.7   1:17.08 httpd
19964 apache    20   0 1030m 327m 266m S  0.0  9.2   1:11.35 httpd
19970 apache    20   0 1019m 316m 265m S  0.0  8.9   0:59.22 httpd
19981 apache    20   0 1034m 316m 249m S  0.0  8.8   1:10.28 httpd
19962 apache    20   0 1103m 312m 176m S  0.0  8.7   1:15.58 httpd
19966 apache    20   0 1040m 306m 233m S  0.0  8.6   1:24.83 httpd
19971 apache    20   0 1037m 304m 235m S  0.0  8.5   1:03.00 httpd
20848 apache    20   0 1023m 304m 248m S  0.0  8.5   1:11.44 httpd
19969 apache    20   0 1022m 303m 248m S  0.0  8.5   1:06.99 httpd
 2199 mysql     20   0  929m 299m 7656 S  0.0  8.4   2137:27 mysqld
27961 apache    20   0 1162m 288m 195m S  0.0  8.1   0:33.04 httpd
19968 apache    20   0 1049m 275m 194m S  0.0  7.7   1:09.61 httpd
20846 apache    20   0 1027m 272m 212m S  0.0  7.6   1:08.45 httpd
30931 apache    20   0 1062m 270m 177m S  0.0  7.6   0:21.48 httpd
21038 apache    20   0 1049m 269m 187m S  0.0  7.5   1:03.50 httpd
19984 apache    20   0 1023m 267m 211m S  0.0  7.5   1:01.80 httpd
19960 apache    20   0 1060m 259m 166m S  0.0  7.3   1:01.87 httpd
19972 apache    20   0 1025m 258m 202m S  0.0  7.2   1:01.66 httpd
19965 apache    20   0 1031m 256m 192m S  0.0  7.2   1:05.59 httpd
19963 apache    20   0 1022m 248m 192m S  0.0  6.9   0:55.78 httpd
19961 apache    20   0 1037m 247m 177m S  0.0  6.9   1:18.43 httpd
30934 apache    20   0 1019m 242m 189m S  0.0  6.8   0:07.20 httpd
30932 apache    20   0 1062m 233m 140m S  0.0  6.5   0:09.04 httpd
24211 apache    20   0 1020m 230m 177m S  0.0  6.4   0:39.03 httpd
19974 apache    20   0 1020m 227m 174m S  0.0  6.4   1:14.78 httpd
31298 apache    20   0 1015m 215m 168m S  0.0  6.0   0:05.64 httpd
  406 apache    20   0 1146m 181m  94m S  0.0  5.1   0:08.68 httpd
31297 apache    20   0 1033m 161m  96m S  0.0  4.5   0:08.05 httpd
  408 apache    20   0 1020m 139m  86m S  0.0  3.9   0:02.53 httpd
 1370 apache    20   0 1041m 136m  53m S  0.0  3.8   0:02.26 httpd
 1372 apache    20   0 1019m 125m  73m S  0.0  3.5   0:01.01 httpd
 1392 apache    20   0 1041m 111m  37m S  0.0  3.1   0:02.18 httpd
 1402 apache    20   0 1107m 100m  52m S  0.0  2.8   0:00.33 httpd
 1542 apache    20   0 1013m  97m  51m S  0.0  2.7   0:00.88 httpd
 1362 apache    20   0  999m  92m  52m S  0.0  2.6   0:01.03 httpd
 1424 apache    20   0  997m  91m  53m S  0.0  2.6   0:00.60 httpd
 1410 apache    20   0  997m  91m  53m S  0.0  2.6   0:00.38 httpd
  407 apache    20   0 1019m  91m  39m S  0.0  2.6   0:01.17 httpd
 1427 apache    20   0  997m  91m  52m S  0.0  2.6   0:00.57 httpd
 1371 apache    20   0 1013m  83m  37m S  0.0  2.3   0:00.31 httpd
 1541 apache    20   0  981m  57m  34m S  0.0  1.6   0:00.17 httpd
32187 root      20   0  967m  26m  17m S  0.0  0.7   0:02.49 httpd

sar -u 的输出

06:10:01 AM     all     18.23      0.00      2.03      2.42     15.23     62.09
06:20:01 AM     all     50.85      0.00      2.84      0.46     40.40      5.45
06:30:02 AM     all     48.69      0.00      2.76      0.63     38.56      9.35
06:40:01 AM     all     47.25      0.00      2.85      1.60     37.61     10.70
06:50:02 AM     all     50.16      0.00      3.52      0.57     40.73      5.03
07:00:01 AM     all     47.51      0.00      2.76      0.75     37.77     11.21
07:10:01 AM     all     35.43      0.00      2.65      1.73     28.79     31.40
07:20:02 AM     all     19.84      0.00      2.10      2.21     16.67     59.19
07:30:02 AM     all     24.34      0.00      2.30      2.28     20.17     50.91
07:40:02 AM     all     18.45      0.00      1.66      1.97     15.14     62.78
07:50:01 AM     all     22.23      0.00      2.32      2.92     18.55     53.98
08:00:02 AM     all     19.60      0.00      1.98      2.31     16.21     59.90
08:10:02 AM     all     18.17      0.00      2.00      3.72     15.07     61.04
08:20:01 AM     all     13.80      0.00      1.72      3.27     11.73     69.48
08:30:01 AM     all     11.79      0.00      1.50      3.40     10.03     73.28
08:40:01 AM     all     16.59      0.00      1.95      2.73     14.02     64.71
08:50:01 AM     all     18.04      0.00      1.96      2.37     15.26     62.38
09:00:02 AM     all     17.94      0.00      2.16      2.79     15.20     61.91
09:10:01 AM     all      4.97      0.00      0.82      1.07      4.46     88.69
09:20:01 AM     all      0.18      0.00      0.28      0.19      0.50     98.85
09:30:01 AM     all      0.13      0.00      0.19      0.05      0.41     99.21
09:40:01 AM     all      0.17      0.00      0.19      0.07      0.43     99.14
09:50:01 AM     all      0.13      0.00      0.21      0.03      0.45     99.18
10:00:02 AM     all      0.17      0.00      0.23      0.05      0.47     99.08
10:10:02 AM     all      0.14      0.00      0.20      0.04      0.44     99.18

10:10:02 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
10:20:01 AM     all      0.16      0.00      0.24      0.03      0.49     99.08
10:30:01 AM     all      0.14      0.00      0.21      0.03      0.43     99.19
Average:        all     19.78      0.03      1.78      2.19     16.21     60.01

sar -r 的输出

06:00:02 AM    135820   3528208     96.29    194768   1170836   2544680     54.00
06:10:01 AM    140220   3523808     96.17    196932   1174256   2531460     53.72
06:20:01 AM    133368   3530660     96.36    199088   1180468   2534200     53.77
06:30:02 AM     75624   3588404     97.94    201796   1187420   2590456     54.97
06:40:01 AM     56112   3607916     98.47    201388   1138840   2669548     56.65
06:50:02 AM     83040   3580988     97.73    195960   1120028   2659192     56.43
07:00:01 AM     56500   3607528     98.46    198812   1128004   2688464     57.05
07:10:01 AM     82508   3581520     97.75    201584   1080180   2699568     57.28
07:20:02 AM    118984   3545044     96.75    204008   1061088   2681724     56.91
07:30:02 AM     48180   3615848     98.69    206580   1053828   2757888     58.52
07:40:02 AM     98828   3565200     97.30    208404   1010216   2752216     58.40
07:50:01 AM     53364   3610664     98.54    181868    961276   2943300     62.46
08:00:02 AM     72516   3591512     98.02    132032    820096   3182764     67.54
08:10:02 AM     97400   3566628     97.34     81824    793872   3254192     69.05
08:20:01 AM    105988   3558040     97.11     77336    796660   3239836     68.75
08:30:01 AM    110324   3553704     96.99     71368    805276   3242836     68.81
08:40:01 AM     89500   3574528     97.56     79736    814620   3255128     69.07
08:50:01 AM    137284   3526744     96.25     83296    817316   3192548     67.74
09:00:02 AM     28812   3635216     99.21     62000    723488   3599616     76.38
09:10:01 AM     42524   3621504     98.84     28976    601588   3792068     80.47
09:20:01 AM     71276   3592752     98.05     25720    583384   3782844     80.27
09:30:01 AM     81648   3582380     97.77     22472    573408   3784820     80.31
09:40:01 AM     87440   3576588     97.61     21816    573048   3784832     80.31
09:50:01 AM     80876   3583152     97.79     21860    572996   3785180     80.32
10:00:02 AM     88716   3575312     97.58     22032    569412   3783548     80.29
10:10:02 AM     90332   3573696     97.53     22312    569088   3779908     80.21

10:10:02 AM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit
10:20:01 AM     88780   3575248     97.58     22612    567108   3783600     80.29
10:30:01 AM     90904   3573124     97.52     22932    566772   3780868     80.23
Average:       168071   3495957     95.41    129184    898526   2965883     62.94

更新:非常感谢大家对此的评论和帮助。我在这里添加了更多背景信息:

我对 apache 进程的大小(以及服务器数量)存有疑问。进程大小过大是否表示存在问题?当我将服务器数量减少到 8 台时,apache 进程的大小在重启后立即变为 (200Mb-400Mb)。当我增加服务器数量时,大小会大幅减少到 (60mB) 左右,但随着时间的推移,它们的大小会增加,如上面的顶部输出所示。因此,我对服务器数量有点不确定 - 似乎 apache 在服务器数量较少时只是抢占可用内存 - 这是对此的合理解释吗?

我们正在一些虚拟主机上运行 apc,特别是服务器上的 2 个 magento 安装。

我关闭了 KeepAlive,看看这是否会影响不断增加的进程大小,似乎没有效果,但我在尝试解决这个问题以将其从方程式中消除时将其关闭。我们还尝试使用较低的 MaxRequestsPerChild 值 200,以防出现问题。

服务器有 4G 内存,但是我无法确定平均进程大小到底是多少(因为根据 apache 的设置不同而变化),我采用了这种方法,从低开始然后增加 apprach 并查看 free -m 中的可用内存(查看缓冲区/缓存线)

感谢您提供的意见。

答案1

sar -u和列表之间似乎存在不一致top。未列出的某些内容占用了大量 CPU。尝试将 top 的排序顺序更改为 %CPU,以查看 CPU 的去向。

看起来您在 Apache 下运行的应用程序中存在严重的内存泄漏。尝试将 MaxRequestsPerChild 减少到 200 或 100。这应该会导致服务器在泄漏过多内存之前被回收。

将 MaxSpareServers 减少到 10 左右可能会释放更多内存。

我使用修改后的日志格式来显示请求的执行时间。您可以使用执行时间字段来确定请求是否需要太长时间才能得到服务。这是我在同一个日志文件中为具有多个虚拟服务器的主机使用的日志格式。该%(ms)T值替换了,除非启用了 IdentityCheck,否则%l它始终为-。(IdentityCheck 依赖于ident在远程服务器上启用,这极不可能。)

# Modified log format with virtual host, execution time, and query params
LogFormat "%v:%p %a %{ms}T %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" local

相关内容