Apache的内存不自动释放导致宕机问题
本文最后更新于 621 天前,其中的信息可能已经有所发展或是发生改变。

上面有篇文章说道,本小站的服务器最近一直很不稳定,不知道为什么,于是,小编上后台一看,Out Of Mem!!

几个不大但是醒目的字,深深地刺痛了小编那颗幼小的心脏!!!

于是,重启之后,发现,全部是Apache在捣鬼,连我的swap都不放过!!

 

额,swap都是0K可用!!!这个!!!

渐渐地,我发现了这个问题总是出现于同一时间,高并发的访问,于是Apache就承受不住了(小编后面有时间会出Apache更换Nginx的教程的,最近比较忙,Nginx的性能比Apache要好很多,尤其是高规模并发访问)

于是,小编开始寻找问题出在哪里,渐渐地渐渐地,在度娘,已经古哥的帮助之下,小编发现了,这个是由于httpd.conf设置不合理导致的,于是,小编打开了这些个文件,发现

额 ,这个值,要知道小编用的prefork模式,设置的值如下:

StartServers:10

ServerLimit 200

MaxClients 200

MaxRequestsPerChild 500

据网上的那些大神们说,MaxRequestPerChild一般过250,1个G内存就根本承受不住了,别说这么大了,真不知道阿里云的人员预装Apache设置的值是怎么想的·······

解释一下:

MaxRequestsPerChild这个指令设定一个独立的子进程将能处理的请求数量。在处理 “MaxRequestsPerChild 数字”个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放,如果再有访问请求,父进程会重新产生子进程进行处理。
如果MaxRequestsPerChild缺省设为0(无限)或较大的数字(例如10000以上)可以使每个子进程处理更多的请求,不会因为不断终止、启动子进程降低访问效率,但MaxRequestsPerChild设置为0时,如果占用了200~300M内存,即使负载下来时占用的内存也不会减少。内存较大的服务器可以设置为0或较大的数字。内存较小的服务器不妨设置成30、50、100,以防内存溢出!

还有那个KeepAlive数量,也是要设置的,那个决定了你的进程在一次接受多少请求,一般要设置成打开,对于传输静态文件,还是很有意义的。

于是小编按照说明,设成了如下:

把那些值都减小了许多,于是,小编这几天暂时还没有出现out of mem的情况,具体设置的值如下:

StartServers:5

ServerLimit 100

MaxClients 100

MaxRequestsPerChild 100

记住,MaxClients和ServerLImit要一样,否则········小编也没试过,大神说的。

据这几天观察,内存最高到剩余200M,但是作为一个普通服务器来说,我也不指望上万的PV,多么高的并发,够用就行,如果你真的追求高并发,用Nginx吧!!

评论

  1. 6年前
    2014-9-25 15:36:25

    作为你的同学,支持一下你~

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇