在apache中我們有兩種工作模式MaxClients和ServerLimit,它們在于apache性能上起到了很大的作用,下面介紹一下MaxClients和ServerLimit參數詳解
prefork模式和worker模式參數詳解
使用httpd -l命令查看使用的線程模塊,一般是prefork.c和work.c兩者,前者居多。確定后修改http配置文件相應的部分,如prefork.c的:
- <IfModule prefork.c>
- StartServers 5
- MinSpareServers 3
- MaxSpareServers 10
- ServerLimit 16
- MaxClients 16
- MaxRequestsPerChild 2000
- </IfModule>
這里StartServers是開始的進程數,MinSpareServers是最小空閑進程數,MaxSpareServers是最大空閑進程數。MaxRequestsPerChild是每個進程請求這么多次后就釋放重新建立(為0時永遠不釋放)。
這里我們要說的重點就是ServerLimit和MaxClients值有什么關系,這個值怎么設置?
ServerLimit是最大的進程數,MaxClients是最大的請求并發,所以他們的關系是MaxClients=ServerLimit*進程的線程數。
1.對于perfork.c模塊,其特點是:每個子進程只有一個線程。每個進程在某個確定的時間只能維持一個連接。在大多數平臺上,Prefork MPM在效率上要比Worker MPM要高,但是內存使用大得多。prefork的無線程設計在某些情況下將比worker更有優勢:它可以使用那些沒有處理好線程安全的第三方模塊。
既然是一個進程一個線程,所以在prefork.c下,這兩個值是相等的。注:ServerLimit最大值為2000.
2.對于work.c模塊來說,是多線程的,默認是一個進程有25個線程,因此如果設置ServerLimit為100,那么MaxClients最大可以設置為2500。
這里說說我們可憐的vps,為了省錢一般只有512m-1g的內存,而prefork.c一個進程占用30-45m左右的內存(這個值跟php-fpm下php-cgi內存占用相當),所以如果有512m的內存話,系統+mysql(最小節約配置)吃掉250m左右,剩下的內存也就是跑10個進程,所以這個值真的是很可憐,不過對于流量小的站點,這個并發也夠用了,一般跑個上千的流量不是問題。所以做web服務,有錢還是多弄點內存的好,或者跑lnmp是比較合適的選擇。
新聞熱點
疑難解答