最簡單的辦法是利用mpm_winnt來設定該多路處理模組(MPM)是Windows NT上的預設值。它使用一個單獨的父進程產生一個單獨的子進程,在這個子進程中輪流產生多個線程來處理請求。
說明 專門為Windows NT最佳化過的MPM
狀態 MPM
模組名 mpm_winnt_module
源檔案 mpm_winnt.c
apache2confhttpd.conf,尋找MaxRequestsPerChild,將MaxRequestsPerChild 0改成MaxRequestsPerChild 50即可。
如果沒有上面所有的我們可以在httpd.conf找到httpd-mpm.conf把前在的#去了,然後到confextra目錄找到httpd-mpm.conf,然後找到最後一行 有 # WinNT MPM開的,代表只能用在windows下的,其它不要管,不適合我們windows伺服器。
如果沒有我們可以增加
相關參數說明
ThreadsPerChild
這個參數用於設定每個進程的線程數, 子進程在啟動時建立這些線程後就不再建立新的線程了. 一方面因為mpm_winnt不能啟動多個進程, 所以這個數值要足夠大,以便可以處理可能的請求高峰; 另一方面該參數以伺服器的響應速度為準的, 數目太大的反而會變慢。因此需要綜合均衡一個合理的數值。
mpm_winnt上的預設值是64, 最大值是1920. 這裡建議設定為100-500之間,伺服器效能高的話值大一些,反之值小一些。
MaxRequestsPerChild
這個參數是說,apache進程在處理了多少個請求之後,必須退出,重新開始,以免在處理中的記憶體問題。
Win32DisableAcceptEx
AcceptEx()是一個微軟的WinSock2 API ,通過使用BSD風格的accept() API提供了效能改善。一些流行的Windows產品,比如防毒軟體或虛擬私人網路軟體,會干擾AcceptEx()的正確操作。如果你遇到類似於如下的錯誤:
[error] (730038)An operation was attempted on something that is not a socket.: winnt_accept: AcceptEx failed. Attempting to recover.
你就需要使用這個指令來禁止使用AcceptEx()
例
代碼如下 |
複製代碼 |
<IfModule mpm_winnt_module> ThreadLimit 1000 ThreadsPerChild 500 MaxRequestsPerChild 10000 Win32DisableAcceptEx EnableMMAP off EnableSendfile off </IfModule> |