發新話題

apache 2 改變默認的 MAX CLIENTS

apache 2 改變默認的 MAX CLIENTS

在Apache2.0中新加入了ServerLimit指令,使得無須重編譯Apache就可以加大MaxClients。下面是筆者的prefork配置段。  

<IfModule prefork.c>
StartServers 10
MinSpareServers 10
MaxSpareServers 15
ServerLimit 2000
MaxClients 1500
MaxRequestsPerChild 10000
</IfModule>

BTW: ServerLimit的最大值是20000,這對於大多數站點是足夠了,但如果你一定要再加大的話,那麼這個值位於源代碼樹下的server/mpm/prefork/prefork.c中。裡面的  

#define DEFAULT_SERVER_LIMIT 256
#define MAX_SERVER_LIMIT 20000

這兩行就對應著MaxClients和ServerLimit的限制值。但我相信很少有人可以用到20000的並發連接數。
如果你有耐性看完了我這篇文檔,我相信您對Apache2.0 缺省的prefork的工作原理有所熟悉了,理解了它的工作過程後,就可以根據您的實際情況在FreeBSD下來配置Apache相關的核心參數以獲得最大的性能。

其實用apache2的話,./configure中應該用--with-mpm=worker參數,這樣才能發揮apache2的多線程機制。
vi ~apache_install_path/conf/httpd.conf

<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>

MaxClients  x ThreadsPerChild  =響應的請求數,可以根據自己的實際情況,更改threadsperchild數目。
對於linux下,其實不能實現多線程模式,要加大MaxClients 的數目,solaris下,就非常優秀了。。
wangmingda  說的也很正確,他是apache2編譯的時候採用了默認的 --with-mpm=prefork模式,這種模式是兼容舊的軟件版本的,不能更好的發揮apache2的線成特性。
引用:
Compile-Time Configuration Issues
Choosing an MPM
Apache 2.x supports pluggable concurrency models, called Multi-Processing Modules (MPMs). When building Apache, you must choose an MPM to use. There are platform-specific MPMs for some platforms: beos, mpm_netware, mpmt_os2, and mpm_winnt. For general Unix-type systems, there are several MPMs from which to choose. The choice of MPM can affect the speed and scalability of the httpd:

The worker MPM uses multiple child processes with many threads each. Each thread handles one connection at a time. Worker generally is a good choice for high-traffic servers because it has a smaller memory footprint than the prefork MPM.  
The prefork MPM uses multiple child processes with one thread each. Each process handles one connection at a time. On many systems, prefork is comparable in speed to worker, but it uses more memory. Prefork's threadless design has advantages over worker in some situations: it can be used with non-thread-safe third-party modules, and it is easier to debug on platforms with poor thread debugging support.  
For more information on these and other MPMs, please see the MPM documentation.
訪客無法瀏覽此圖片或連結,請先 註冊登入會員

因為在設置的時候出現錯誤,所以把我的想法說說看。

設置
ServerLimit 8
StartServers 2
MinSpareThreads 15
MaxSpareThreads 25
ThreadsPerChild 25
MaxRequestsPerChild  1000
MaxClients 250

錯誤:
WARNING: MaxClients of 250 would require 10 servers,
and would exceed the ServerLimit value of 8.
Automatically lowering MaxClients to 200.  To increase,
please see the ServerLimit directive.

經過多次計算測試,我覺得應該是
MaxClients <= ServerLimit * ThreadsPerChild
官方有教
訪客無法瀏覽此圖片或連結,請先 註冊登入會員

TOP

Linux系統下Apache服務器設置與優化

MaxClients 150

在另一方面,服務器的能力畢竟是有限的,不可能同時處理無限多的連接請求,因此參數 Maxclients就用於規定服務器支持的最多並發訪問的客戶數,如果這個值設置得過大,系統在繁忙時不得不在過多的進程之間進行切換來為太多的客戶進行服務,這樣對每個客戶的反應就會減慢,並降低了整體的效率。如果這個值設置的較小,那麼系統繁忙時就會拒絕一些客戶的連接請求。當服務器性能較高時,就可以適當增加這個值的設置。對於專業網站,應該使用提高服務器效率的策略,因此這個參數不能超過硬件本身的限制,如果頻繁出現拒絕訪問現象,就說明需要升級服務器硬件了。當不太在意對客戶瀏覽器的反應速度,或者認為反應速度較慢也比拒絕連接好,就也可以略微超過硬件條件來設置這個參數。

但具體這個數值以多少為宜呢?當對性能要求較高時,可以用下面的方法確定如何配置此參數。

首先,估計你的最大可能並發的連接數,或者在高負載時用ps -ef|grep apache|wc命令測得最大進程數,通常MaxClients應該是這個數值的兩倍左右。如果當前網站在高負載時的訪問速度可以接受,但有拒絕服務現象,則應把此參數調大,如果無拒絕服務現象,但訪問速度緩慢,則應減低此數值。

這個參數同時限制了MinSpareServers和MaxSpareServers的設置,它們不應該大於這個參數的設置。

對於重負載的機器來說,僅僅這麼做還是不夠的。

Apache允許為請求開的最大進程數是256,MaxClients的限制是256.如果用戶多了,用戶就只能看到Waiting for reply....然後等到下一個可用進程的出現。這個最大數,是Apache的程序決定的--它的NT版可以有1024,但Unix版只有256,你可以在include/httpd.h中

看到:

#ifndef HARD_SERVER_LIMIT

#ifdef WIN32 php開源嘛

#define HARD_SERVER_LIMIT 1024  

#else

#define HARD_SERVER_LIMIT 256

#endif

#endif

你可以把它調到1024,然後再編譯你的系統。記得在httpd.conf裡也要更改相應配置。

MaxRequestsPerChild 30

使用子進程的方式提供服務的Web服務,常用的方式是一個子進程為一次連接服務,這樣造成的問題就是每次連接都需要生成、退出子進程的系統操作,使得這些額外的處理過程佔據了計算機的大量處理能力。因此最好的方式是一個子進程可以為多次連接請求服務,這樣就不需要這些生成、退出進程的系統消耗,Apache就採用了這樣的方式,一次連接結束後,子進程並不退出,而是停留在系統中等待下一次服務請求,這樣就極大的提高了性能。php開源嘛

但由於在處理過程中子進程要不斷的申請和釋放內存,次數多了就會造成一些內存垃圾,就會影響系統的穩定性,並且影響系統資源的有效利用。因此在一個副本處理過一定次數的請求之後,就可以讓這個子進程副本退出,再從原始的 httpd進程中重新複製一個乾淨的副本,這樣就能提高系統的穩定性。這樣,每個子進程處理服務請求次數由MaxRequestPerChild定義。缺省的設置值為30,這個值對於具備高穩定性特點的Linux系統來講是過於保守的設置,可以設置為1000甚至更高,設置為0支持每個副本進行無限次的服務處理。

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。