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