放假以來,伺服器Apache二次崩掉了,不能再拖了,找bug解決; <! more 崩掉的具體狀況是,伺服器出現彈框顯示:Apache停止工作; 順手關掉這個可惡的小彈框,世界就清靜了,伺服器正常運行; 具體問題: lxx__lxx__lxx__lxx__lxx__lxx__lxx__lxx____ ...
放假以來,伺服器Apache二次崩掉了,不能再拖了,找bug解決;
崩掉的具體狀況是,伺服器出現彈框顯示:Apache停止工作;
順手關掉這個可惡的小彈框,世界就清靜了,伺服器正常運行;
具體問題:
查看錯誤日誌\Apache\logs
,找到關鍵報錯:
[Mon Aug 14 10:47:19.644531 2017] [mpm_winnt:error] [pid 5776:tid 4144] AH00326: Server ran out of threads to serve requests. Consider raising the ThreadsPerChild setting
報錯表示進程的線程數不夠用,可以修改ThreadsPerChild
,即每個子進程開啟的併發線程數。
報錯分析:
Apache針對不同的操作系統提供了多個不同的MPM模塊,例如:mpm_beos
、mpm_event
、mpm_netware
、mpmt_os2
、mpm_prefork
、mpm_winnt
、mpm_worker
。
Windows操作系統上預設的MPM模塊是mpm_winnt
,mpm_winnt
模塊是專門針對Windows操作系統而優化設計的MPM模塊。它只創建一個單獨的子進程,併在這個子進程中輪流產生多個線程來處理請求。
在對Apache的MPM模塊具備一定瞭解後,我們就可以針對不同的MPM模塊來修改Apache的最大併發連接數配置了。
報錯解決:
修改MPM模塊配置
1 啟用MPM模塊配置文件
在Apace安裝目錄/conf/extra
目錄中有一個名為httpd-mpm.conf
的配置文件。該文件主要用於進行MPM模塊的相關配置。不過,在預設情況下,Apache的MPM模塊配置文件並沒有啟用。因此,我們需要在httpd.conf
文件中啟用該配置文件,如下所示:
# Server-pool management (MPM specific)
Include conf/extra/httpd-mpm.conf (去掉該行前面的註釋符號"#")
2 修改MPM模塊配置文件中的相關配置
修改http-mpm.conf
文件
#由於mpm_winnt模塊只會創建1個子進程,因此這裡對單個子進程的參數設置就相當於對整個Apache的參數設置。
<IfModule mpm_winnt_module>
ThreadsPerChild 521 #預設值是150,推薦設置:小型網站=1000 中型網站=1000~2000 大型網站=2000~3500
MaxRequestsPerChild 3000 #推薦設置:小=10000 中或大=20000~100000
</IfModule>
3 重啟phpstudy,啟動成功了,接下來幾天是觀察時間了;有錯的話再更新文章!
更多文章可以來我的個人博客裡面看到
歡迎來訪:綿綿小站
參考文章:
- Apache優化:修改最大併發連接數
- Apache工作模式配置
- Server ran out of threads to serve requests. Consider raising the ThreadsPerChild setting
- Apache總是停止工作怎麼辦