Search

Apache 內存溢出假死問題的解決

Apache 內存溢出假死問題的解決

Apache 內存溢出假死問題的解決插圖

httpd-mpm.conf 配置文件


Windows 下的 Apache 加載的是?mpm_winnt_module?部分的配置。 Apache 服務初始化后,內存里 new 出來?httpd.exe?的進程,對請求后線程分配一些資源(暫時不釋放的),這樣內存就開始飚升,如果用戶長時間訪問頁面,內存就掉不下來了。因此,顯示地設置了?MaxRequestsPerchild?(每個子進程所處理的最大請求數(shù))參數(shù),希望它在每次處理完請求后,kill?掉進程,在重新創(chuàng)建,保持內存不會溢出。看了網(wǎng)絡上有文章把?MaxRequestsPerchild?這個參數(shù)設置成 100,說是不會出現(xiàn)?httpd.exe?的死進程了,但經(jīng)過測試把它從原來的0(無限制)改成了 100 后,問題稍微緩解,問題仍然存在,Apache 仍然會定期假死……

尤其是站點配置了?https?容易假死,而普通的?http?可以正常工作,經(jīng)過不斷的測試,最終發(fā)現(xiàn)參數(shù)?ThreadLimit:線程數(shù)限制,這個參數(shù)的設定值要和?ThreadPerChild?的值要一致, 以及?AcceptFilter https none,來看看下面配置。

# WinNT MPM
# ThreadsPerChild: constant number of worker threads in the server process
# MaxConnectionsPerChild: maximum number of connections a server process serves
<IfModule mpm_winnt_module>
    AcceptFilter http none   #注意這里
    AcceptFilter https none  #注意這里
    ThreadsPerChild   50
    ThreadLimit       50  #設置要和 ThreadPerChild 一致
    MaxConnectionsPerChild   500
</IfModule>

目前看,比較穩(wěn)定,暫時沒再出現(xiàn)假死情況。

Win32DisableAcceptEx 的坑


網(wǎng)上很多文章寫的配置?Win32DisableAcceptEx,這其實是在 Apache 2.4 之前的版本,之后已經(jīng)沒有這個配置,應該是下面的:

AcceptFilter http none
AcceptFilter https none

FYI: Serverfault.com 解決 Apache 假死的原文參考:


After testing various configurations, we found out the problem and the server runs stable for 7 days now without any problems.

This settings in httpd.conf file fixed the problem:

AcceptFilter http none
AcceptFilter https none

Previously, we only had the AcceptFilter for http and the second line was missing.

According to Apache documentation the default values on Windows are:

AcceptFilter http data
AcceptFilter https data

Using none value uses?accept()?rather than?AcceptEx()?and will not recycle sockets between connections.

目錄
色达县| 进贤县| 南岸区| 石首市| 沂南县| 岗巴县| 嘉善县| 伊春市| 佛坪县| 余庆县| 益阳市| 师宗县| 襄城县| 五指山市| 项城市| 离岛区| 湖口县| 嵊泗县| 琼结县| 册亨县| 泽库县| 二手房| 吴川市| 广河县| 安徽省| 汉寿县| 于都县| 泸定县| 岑巩县| 宣城市| 茂名市| 剑阁县| 拉孜县| 安吉县| 田东县| 炉霍县| 北海市| 涪陵区| 弋阳县| 弥渡县| 石狮市|