Pages

Thursday, February 5, 2009

apache web server 内存暴增解决办法

0 K" ]. ^: n4 o0 R/ o1 w前阵子总是发现 httpd 进程的使用内存总量居然达到了上百Mb,有时甚至上Gb,真是夸张。通过排查,发现是 Apache 中开启了持续长连接导致。, t* Z$ ^) a& ?/ I/ u! w9 b

9 S9 {3 y$ f9 ^# s, pApache 进程的内存使用是 "递增/渐进" 式的,也就是在当前进程的 httpd 过程中,内存使用是持续增加的,也就是说在该进程退出之前,内存是持续增加的。主要是由于下面三个参数来控制。3 u \6 O5 [" @
s2 z. ~/ U" Q# J4 S& Y. v" b
KeepAlive On 设定是否要开启持续长连接,因此在这里把它打开2 Y' N7 m; m+ V/ Q

$ m- @( i' O: _! L9 @8 HMaxKeepAliveRequests 50 在一次持续长连接中,最多允许接收几次请求,如果设置太大的话,很可能导致 httpd7 m3 y: _! M7 ~6 @, C, N2 }' N
进程持续消耗很多内存,因此可以选择一个适当的值,因为重新创建一个新的进程也是要有一定开销的5 m" | B; ]% [

( c$ J' [5 G8 V8 C7 Q; i' b3 j9 sKeepAliveTimeout 5 设定一个长连接在没有活动后等待多久自动关闭,可以设置小一点,不过跟上面的类似,如果太小的话,也会导致频繁创建新的进程1 [7 ?2 C2 e- [2 @

5 l, q& _2 P4 i# @4 _9 X3 O现在,调整完上面的参数后,会发现 httpd 进程不再象以前那样狂吃内存了。

No comments: