prefork模式和worker模式參數詳解
使用httpd -l命令查看使用的線程模塊,一(yī)般是prefork.c和work.c兩者,前者居多。确定後修改http配置文件相應的部分(fēn),如prefork.c的:
代碼如下(xià) |
|
|
這裏StartServers是開(kāi)始的進程數,MinSpareServers是最小(xiǎo)空閑進程數,MaxSpareServers是最大(dà)空閑進程數。MaxRequestsPerChild是每個進程請求這麽多次後就釋放(fàng)重新建立(爲0時永遠不釋放(fàng))。
這裏我(wǒ)們要說的重點就是ServerLimit和MaxClients值有什麽關系,這個值怎麽設置?
ServerLimit是最大(dà)的進程數,MaxClients是最大(dà)的請求并發,所以他們的關系是MaxClients=ServerLimit*進程的線程數。
1.對于perfork.c模塊,其特點是
每個子進程隻有一(yī)個線程。每個進程在某個确定的時間隻能維持一(yī)個連接。在大(dà)多數平台上,Prefork MPM在效率上要比Worker MPM要高,但是内存使用大(dà)得多。prefork的無線程設計在某些情況下(xià)将比worker更有優勢:它可以使用那些沒有處理好線程安全的第三方模塊。
既然是一(yī)個進程一(yī)個線程,所以在prefork.c下(xià),這兩個值是相等的。注:ServerLimit最大(dà)值爲2000.
2.對于work.c模塊來說,是多線程的,默認是一(yī)個進程有25個線程,因此如果設置ServerLimit爲100,那麽MaxClients最大(dà)可以設置爲2500。
prefork.c一(yī)個進程占用30-45m左右的内存(這個值跟PHP-fpm下(xià)php-cgi内存占用相當),所以如果有512m的内存話(huà),系統+mysql(最小(xiǎo)節約配置)吃掉250m左右,剩下(xià)的内存也就是跑10個進程,所以這個值真的是很可憐,不過對于流量小(xiǎo)的站點,這個并發也夠用了,一(yī)般跑個上千的流量不是問題。