apache修改最大連接并用ab網(wǎng)站壓力測試
apache 2.2,使用默認配置,默認最大連接數(shù)是150
1.首先在httpd.conf中加載httpd-mpm.conf配置(去掉前面的注釋):
# Server-pool management (MPM
specific)
Include conf/extra/httpd-mpm.conf
2.可見的MPM配置在/usr/local/apache/conf/extra/httpd-mpm.conf,但里面根據(jù)httpd的工作模式分了很多塊,哪一部才是當前httpd的工作模式呢?可通過執(zhí)行
apachectl -l 來查看:
[root@zh888 extra]# /usr/local/apache/bin/apachectl
-l//因為采用靜態(tài)編譯
Compiled in
modules:
core.c
mod_authn_file.c
mod_authn_default.c
mod_authz_host.c
mod_authz_groupfile.c
mod_authz_user.c
mod_authz_default.c
mod_auth_basic.c
mod_cache.c
mod_disk_cache.c
mod_mem_cache.c
mod_include.c
mod_filter.c
mod_deflate.c
mod_log_config.c
mod_env.c
mod_expires.c
mod_headers.c
mod_setenvif.c
mod_version.c
mod_proxy.c
mod_proxy_connect.c
mod_proxy_ftp.c
mod_proxy_http.c
mod_proxy_scgi.c
mod_proxy_ajp.c
mod_proxy_balancer.c
prefork.c//才用prefork所以在httpd-mpm.conf中找到mpm_prefork_module
http_core.c
mod_mime.c
mod_status.c
mod_autoindex.c
mod_asis.c
mod_cgi.c
mod_negotiation.c
mod_dir.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_rewrite.c
mod_so.c
所以修改連接數(shù)就在/usr/local/apache/conf/extra/httpd-mpm.conf這個文件了,打開它就找到prefork模式的默認配置是:
StartServers
5
MinSpareServers 5
MaxSpareServers 10
MaxClients
150
MaxRequestsPerChild 0
prefork
控制進程在最初建立“StartServers”個子進程后,為了滿足MinSpareServers設(shè)置的需要創(chuàng)建一個進程,等待一秒鐘,繼續(xù)創(chuàng)建兩個,再等待一秒鐘,繼續(xù)創(chuàng)建四個……如此按指數(shù)級增加創(chuàng)建的進程數(shù),最多達到每秒32個,直到滿足MinSpareServers設(shè)置的值為止。
這種模式可以不必在請求到來時再產(chǎn)生新的進程,從而減小了系統(tǒng)開銷以增加性能。MaxSpareServers設(shè)置了最大的空閑進程數(shù),如果空閑進程數(shù)大于這個值,Apache會自動kill掉一些多余進程。這個值不要設(shè)得過大,但如果設(shè)的值比MinSpareServers小,Apache會自動把其調(diào)整為
MinSpareServers+1。如果站點負載較大,可考慮同時加大MinSpareServers和MaxSpareServers。
MaxRequestsPerChild設(shè)置的是每個子進程可處理的請求數(shù)。每個子進程在處理了“MaxRequestsPerChild”個請求后將自動銷毀。0意味著無限,即子進程永不銷毀。
雖然缺省設(shè)為0可以使每個子進程處理更多的請求,但如果設(shè)成非零值也有兩點重要的好處:
1、可防止意外的內(nèi)存泄漏。
2、在服務(wù)器負載下降的時侯會自動減少子進程數(shù)。因此,可根據(jù)服務(wù)器的負載來調(diào)整這個值。MaxClients是這些指令中最為重要的一個,設(shè)定的是
Apache可以同時處理的請求,是對Apache性能影響最大的參數(shù)。其缺省值150是遠遠不夠的,如果請求總數(shù)已達到這個值(可通過ps -ef|grep
httpd|wc
-l來確認),那么后面的請求就要排隊,直到某個已處理請求完畢。這就是系統(tǒng)資源還剩下很多而HTTP訪問卻很慢的主要原因。雖然理論上這個值越大,可以處理的請求就越多,但Apache默認的限制不能大于256。ServerLimit指令無須重編譯Apache就可以加大MaxClients。
注意,雖然通過設(shè)置ServerLimit,我們可以把MaxClients加得很大,但是往往會適得其反,系統(tǒng)耗光所有內(nèi)存。以我手頭的一臺服務(wù)器為例:內(nèi)存2G,每個apache進程消耗大約0.5%(可通過ps
aux來確認)的內(nèi)存,也就是10M,這樣,理論上這臺服務(wù)器最多跑200個apache進程就會耗光系統(tǒng)所有內(nèi)存,所以,設(shè)置MaxClients要慎重。
3.要加到多少?
連接數(shù)理論上當然是支持越大越好,但要在服務(wù)器的能力范圍內(nèi),這跟服務(wù)器的CPU、內(nèi)存、帶寬等都有關(guān)系。
查看當前的連接數(shù)可以用:
ps aux | grep httpd | wc -l
計算httpd占用內(nèi)存的平均數(shù):
ps
aux|grep -v grep|awk '/httpd/{sum+=$6;n++};'
由于基本都是靜態(tài)頁面,CPU消耗很低,每進程占用內(nèi)存也不算多,大約200K。
假如服務(wù)器內(nèi)存有2G,除去常規(guī)啟動的服務(wù)大約需要500M(保守估計),還剩1.5G可用,那么理論上可以支持1.5*1024*1024*1024/
= 8053.
約8K個進程,支持2W人同時訪問應(yīng)該是沒有問題的(能保證其中8K的人訪問很快,其他的可能需要等待1、2秒才能連上,而一旦連上就會很流暢)
控制最大連接數(shù)的MaxClients ,因此可以嘗試配置為:
StartServers 5
MinSpareServers
5
MaxSpareServers 10
ServerLimit 5500
MaxClients
5000
MaxRequestsPerChild 100
注意,MaxClients默認最大為250,若要超過這個值就要顯式設(shè)置ServerLimit,且ServerLimit要放在MaxClients之前,值要不小于MaxClients,不然重啟httpd時會有提示。
重啟httpd后,通過反復(fù)執(zhí)行pgrep httpd|wc -l
來觀察連接數(shù),可以看到連接數(shù)在達到MaxClients的設(shè)值后不再增加,但此時訪問網(wǎng)站也很流暢,那就不用貪心再設(shè)置更高的值了,不然以后如果網(wǎng)站訪問突增不小心就會耗光服務(wù)器內(nèi)存,可根據(jù)以后訪問壓力趨勢及內(nèi)存的占用變化再逐漸調(diào)整,直到找到一個最優(yōu)的設(shè)置值。
(MaxRequestsPerChild不能設(shè)置為0,可能會因內(nèi)存泄露導(dǎo)致服務(wù)器崩潰)
更佳最大值計算的公式:
apache_max_process_with_good_perfermance < (total_hardware_memory /
apache_memory_per_process ) * 2
apache_max_process =
apache_max_process_with_good_perfermance * 1.5
4.用/usr/local/apache/bin/ab來測試壓力不過還有一個工具叫webbench也可以測試。
[root@zh888 bin]# /usr/local/apache/bin/ab -n 100 -c
100http://192.168.100.1:8000/index.php//參數(shù)很多一般我們用 -c 和 -n
參數(shù)就可以了這個表示同時處理100個請求并運行100次index.php文件.
This is ApacheBench Version 2.3
Copyright 1996 Adam Twiss Zeus Technology
Ltd
Licensed to The Apache Software Foundation
Benchmarking 192.168.100.1 (be patient).....done
Server Software: Apache/2.2.19//平臺apache 版本2.0.54
Server Hostname: 192.168.100.1//服務(wù)器主機名
Server Port: 8000//端口
Document Path: /index.php//測試的頁面文檔
Document Length: bytes//文檔大小
Concurrency Level: 100//并發(fā)數(shù)
Time taken for tests: 4.482 seconds//整個測試持續(xù)的時間
Complete requests: 100//完成的請求數(shù)量
Failed requests: 0//失敗的請求數(shù)量
Write errors: 0
Total transferred: bytes//整個場景中的網(wǎng)絡(luò)傳輸量
HTML transferred: bytes
Requests per second: 22.31 [#/sec]
(mean)//大家最關(guān)心的指標之一,相當于 LR 中的 每秒事務(wù)數(shù) ,后面括號中的 mean 表示這是一個平均值
Time per request: 4481.929 [ms] (mean)//大家最關(guān)心的指標之二,相當于 LR 中的 平均事務(wù)響應(yīng)時間 ,后面括號中的
mean 表示這是一個平均值
Time per request: 44.819 [ms] (mean across all concurrent
requests)//每個請求實際運行時間的平均值
Transfer rate: 793.68 [Kbytes/sec]
received//平均每秒網(wǎng)絡(luò)上的流量,可以幫助排除是否存在網(wǎng)絡(luò)流量過大導(dǎo)致響應(yīng)時間延長的問題
Connection Times (ms)//網(wǎng)絡(luò)上消耗的時間的分解。
min mean[+/-sd] median max
Connect: 0 73 24.5 79 96
Processing: 252
2542 1291.7 2590 4386
Waiting: 252 2541 1292.5 2590 4384
Total: 253 2615
1311.0 2671 4482
Percentage of the requests served within a certain time
(ms)//整個場景中所有請求的響應(yīng)情況。在場景中每個請求都有一個響應(yīng)時間,其中50%的用戶響應(yīng)時間小于1093 毫秒,60% 的用戶響應(yīng)時間小于1247
毫秒,最大的響應(yīng)時間小于7785
毫秒
由于對于并發(fā)請求,cpu實際上并不是同時處理的,而是按照每個請求獲得的時間片逐個輪轉(zhuǎn)處理的,所以基本上第一個Time per
request時間約等于第二個Time per request時間乘以并發(fā)請求數(shù)
50% 2671
66% 3351
75% 3923
80% 4095
90% 4358
95%
4441
98% 4472
99% 4482
100% 4482 (longest request)
4.是在使用Apache2.2的ab進行測試時遇到的問題:
使用ab測試的時候當-c并發(fā)數(shù)超過1024就會出錯:
windows下提示:apr_pollset_create
failed: Invalid argument (22)
linux下提示:socket: Too
many open files (24)
解決辦法:
linux下:ulimit -n
(設(shè)置系統(tǒng)允許同時打開的文件數(shù),系統(tǒng)默認是1024),可以用ulimit -a查看open files項,# lsof |wc -l
可以查看系統(tǒng)所有進程的文件打開數(shù)。
ulimit:顯示(或設(shè)置)用戶可以使用的資源限制
ulimit -a 顯示用戶可以使用的資源限制
ulimit unlimited
不限制用戶可以使用的資源,但本設(shè)置對可打開的最大文件數(shù)(max open files)
和可同時運行的最大進程數(shù)(max user
processes)無效
ulimit -n 設(shè)置用戶可以同時打開的最大文件數(shù)(max open files)
例如:ulimit -n 8192
如果本參數(shù)設(shè)置過小,對于并發(fā)訪問量大的網(wǎng)站,可能會出現(xiàn)too many open files的錯誤
ulimit -u
設(shè)置用戶可以同時運行的最大進程數(shù)(max user processes)
例如:ulimit -u 1024
5最后補充一下apache的知識:
簡介
Apache
HTTP服務(wù)器被設(shè)計為一個強大的、靈活的能夠在多種平臺以及不同環(huán)境下工作的服務(wù)器。不同的平臺和不同的環(huán)境經(jīng)常產(chǎn)生不同的需求,或是為了達到同樣的最佳效果而采用不同的方法。Apache憑借它的模塊化設(shè)計很好的適應(yīng)了大量不同的環(huán)境。這一設(shè)計使得網(wǎng)站管理員能夠在編譯時和運行時憑借載入不同的模塊來決定服務(wù)器的不同附加功能。
Apache2.0將這種模塊化的設(shè)計延伸到了web服務(wù)器的基礎(chǔ)功能上。這個版本帶有多路處理模塊(MPM)的選擇以處理網(wǎng)絡(luò)端口綁定、接受請求并指派鐘進程來處理這些請求。
將模塊化設(shè)計延伸到這一層次主要有以下兩大好處:
*
Apache可以更簡潔、更有效地支持各種操作系統(tǒng)。尤其是在mpm_winnt中使用本地網(wǎng)絡(luò)特性代替Apache1.3中使用的POSIX模擬層后,Windows版本的Apache現(xiàn)在具有更好的性能。這個優(yōu)勢借助特定的MPM同樣延伸到了其他各種操作系統(tǒng)。
*
服務(wù)器可以為某些特定的站點進行定制。比如,需要更好伸縮性的站點可以選擇象worker或event這樣線程化的MPM,而需要更好的穩(wěn)定性和兼容性以適應(yīng)一些舊的軟件的站點可以用prefork
。
從用戶角度來看,MPM更像其他的Apache模塊。主要的不同在于:不論何時,必須有且僅有一個MPM被載入到服務(wù)器中。現(xiàn)有的MPM列表可以在模塊索引中找到。
選擇一個MPM
MPM必須在編譯配置時進行選擇,并靜態(tài)編譯到服務(wù)器中。如果編譯器能夠確定線程功能被啟用,它將會負責(zé)優(yōu)化大量功能。因為一些MPM在Unix上使用了線程,而另外一些沒有使用,所以如果在編譯配置時選擇MPM并靜態(tài)編譯進Apache,Apache將會有更好的表現(xiàn)。
你可以在使用configure腳本時用 --with-mpm=NAME 選項指定MPM,NAME就是你想使用的MPM的名稱。
一旦服務(wù)器編譯完成,就可以用 ./httpd -l
命令來查看使用了哪個MPM。這個命令將列出所有已經(jīng)被編譯到服務(wù)器中的模塊,包括MPM。
我們主要闡述prefork和worker這兩種和性能關(guān)系最大的產(chǎn)品級MPM。
Apache MPM prefork
一個非線程型的、預(yù)派生的MPM
概述
這個多路處理模塊(MPM)實現(xiàn)了一個非線程型的、預(yù)派生的web服務(wù)器,它的工作方式類似于Apache
1.3。它適合于沒有線程安全庫,需要避免線程兼容性問題的系統(tǒng)。它是要求將每個請求相互獨立的情況下最好的MPM,這樣若一個請求出現(xiàn)問題就不會影響到其他請求。
這個MPM具有很強的自我調(diào)節(jié)能力,只需要很少的配置指令調(diào)整。最重要的是將MaxClients設(shè)置為一個足夠大的數(shù)值以處理潛在的請求高峰,同時又不能太大,以致需要使用的內(nèi)存超出物理內(nèi)存的大小。
工作方式
一個單獨的控制進程(父進程)負責(zé)產(chǎn)生子進程,這些子進程用于監(jiān)聽請求并作出應(yīng)答。Apache總是試圖保持一些備用的(spare)或者是空閑的子進程用于迎接即將到來的請求。這樣客戶端就不需要在得到服務(wù)前等候子進程的產(chǎn)生。
StartServers MinSpareServers MaxSpareServers
MaxClients指令用于調(diào)節(jié)父進程如何產(chǎn)生子進程。通常情況下Apache具有很強的自我調(diào)節(jié)能力,所以一般的網(wǎng)站不需要調(diào)整這些指令的默認值。可能需要處理最大超過256個并發(fā)請求的服務(wù)器可能需要增加MaxClients的值。內(nèi)存比較小的機器則需要減少MaxClients的值以保證服務(wù)器不會崩潰。更多關(guān)于調(diào)整進程產(chǎn)生的問題請參見性能方面的提示。
在Unix系統(tǒng)中,父進程通常以root身份運行以便邦定80端口,而Apache產(chǎn)生的子進程通常以一個低特權(quán)的用戶運行。User和Group指令用于設(shè)置子進程的低特權(quán)用戶。運行子進程的用戶必須要對它所服務(wù)的內(nèi)容有讀取的權(quán)限,但是對服務(wù)內(nèi)容之外的其他資源必須擁有盡可能少的權(quán)限。
MaxRequestsPerChild指令控制服務(wù)器殺死舊進程產(chǎn)生新進程的頻率。
Apache MPM worker
支持混合的多線程多進程的多路處理模塊
概述
此多路處理模塊(MPM)使網(wǎng)絡(luò)服務(wù)器支持混合的多線程多進程。由于使用線程來處理請求,所以可以處理海量請求,而系統(tǒng)資源的開銷小于基于進程的MPM。但是,它也使用了多進程,每個進程又有多個線程,以獲得基于進程的MPM的穩(wěn)定性。
控制這個MPM的最重要的指令是,控制每個子進程允許建立的線程數(shù)的ThreadsPerChild指令,和控制允許建立的總線程數(shù)的MaxClients指令。
工作方式
每個進程可以擁有的線程數(shù)量是固定的。服務(wù)器會根據(jù)負載情況增加或減少進程數(shù)量。一個單獨的控制進程(父進程)負責(zé)子進程的建立。每個子進程可以建立ThreadsPerChild數(shù)量的服務(wù)線程和一個監(jiān)聽線程,該監(jiān)聽線程監(jiān)聽接入請求并將其傳遞給服務(wù)線程處理和應(yīng)答。
Apache總是試圖維持一個備用(spare)或是空閑的服務(wù)線程池。這樣,客戶端無須等待新線程或新進程的建立即可得到處理。初始化時建立的進程數(shù)量由StartServers指令決定。隨后父進程檢測所有子進程中空閑線程的總數(shù),并新建或結(jié)束子進程使空閑線程的總數(shù)維持在MinSpareThreads和MaxSpareThreads所指定的范圍內(nèi)。由于這個過程是自動調(diào)整的,幾乎沒有必要修改這些指令的缺省值。可以并行處理的客戶端的最大數(shù)量取決于MaxClients指令。活動子進程的最大數(shù)量取決于MaxClients除以ThreadsPerChild的值。
有兩個指令設(shè)置了活動子進程數(shù)量和每個子進程中線程數(shù)量的硬限制。要想改變這個硬限制必須完全停止服務(wù)器然后再啟動服務(wù)器(直接重啟是不行的),ServerLimit是活動子進程數(shù)量的硬限制,它必須大于或等于MaxClients除以ThreadsPerChild的值。ThreadLimit是所有服務(wù)線程總數(shù)的硬限制,它必須大于或等于ThreadsPerChild指令。這兩個指令必須出現(xiàn)在其他workerMPM指令的前面。
在設(shè)置的活動子進程數(shù)量之外,還可能有額外的子進程處于"正在中止"的狀態(tài)但是其中至少有一個服務(wù)線程仍然在處理客戶端請求,直到到達MaxClients以致結(jié)束進程,雖然實際數(shù)量會很小。這個行為能夠通過以下禁止特別的子進程中止的方法來避免:
* 將MaxRequestsPerChild設(shè)為"0"
* 將MaxSpareThreads和MaxClients設(shè)為相同的值
一個典型的針對workerMPM的配置如下:
ServerLimit 16
StartServers 2
MaxClients
150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild
25
在Unix中,為了能夠綁定80端口,父進程一般都是以root身份啟動,隨后,Apache以較低權(quán)限的用戶建立子進程和線程。User和Group指令用于設(shè)置Apache子進程的權(quán)限。雖然子進程必須對其提供的內(nèi)容擁有讀權(quán)限,但應(yīng)該盡可能給予它較少的特權(quán)。另外,除非使用了suexec
,否則,這些指令設(shè)置的權(quán)限將被CGI腳本所繼承。
MaxRequestsPerChild指令用于控制服務(wù)器建立新進程和結(jié)束舊進程的頻率。
常用指令:
StartServers
指令
StartServers指令設(shè)置了服務(wù)器啟動時建立的子進程數(shù)量。因為子進程數(shù)量動態(tài)的取決于負載的輕重,所有一般沒有必要調(diào)整這個參數(shù)。
MinSpareServers
指令
MinSpareServers指令設(shè)置空閑子進程的最小數(shù)量。所謂空閑子進程是指沒有正在處理請求的子進程。如果當前空閑子進程數(shù)少于MinSpareServers
,那么Apache將以最大每秒一個的速度產(chǎn)生新的子進程。
只有在非常繁忙機器上才需要調(diào)整這個參數(shù)。將此參數(shù)設(shè)的太大通常是一個壞主意。
MaxSpareServers
指令
MaxSpareServers指令設(shè)置空閑子進程的最大數(shù)量。所謂空閑子進程是指沒有正在處理請求的子進程。如果當前有超過MaxSpareServers數(shù)量的空閑子進程,那么父進程將殺死多余的子進程。
只有在非常繁忙機器上才需要調(diào)整這個參數(shù)。將此參數(shù)設(shè)的太大通常是一個壞主意。如果你將該指令的值設(shè)置為比MinSpareServers小,Apache將會自動將其修改成"MinSpareServers+1"。
MaxClients
指令
MaxClients指令設(shè)置了允許同時伺服的最大接入請求數(shù)量。任何超過MaxClients限制的請求都將進入等候隊列,直到達到ListenBacklog指令限制的最大值為止。一旦一個鏈接被釋放,隊列中的請求將得到服務(wù)。
對于非線程型的MPM(也就是prefork),MaxClients表示可以用于伺服客戶端請求的最大子進程數(shù)量,默認值是256。要增大這個值,你必須同時增大ServerLimit
。
對于線程型或者混合型的MPM(也就是beos或worker),MaxClients表示可以用于伺服客戶端請求的最大線程數(shù)量。線程型的beos的默認值是50。對于混合型的MPM默認值是16(ServerLimit)乘以25(ThreadsPerChild)的結(jié)果。因此要將MaxClients增加到超過16個進程才能提供的時候,你必須同時增加ServerLimit的值。
MaxRequestsPerChild
指令
MaxRequestsPerChild指令設(shè)置每個子進程在其生存期內(nèi)允許伺服的最大請求數(shù)量。到達MaxRequestsPerChild的限制后,子進程將會結(jié)束。如果MaxRequestsPerChild為"0",子進程將永遠不會結(jié)束。
不同的默認值
在mpm_netware和mpm_winnt上的默認值是"0"。
將MaxRequestsPerChild設(shè)置成非零值有兩個好處:
*
可以防止(偶然的)內(nèi)存泄漏無限進行,從而耗盡內(nèi)存。
*
給進程一個有限獸命,從而有助于當服務(wù)器負載減輕的時候減少活動進程的數(shù)量。
注意:
對于KeepAlive鏈接,只有第一個請求會被計數(shù)。事實上,它改變了每個子進程限制最大鏈接數(shù)量的行為。
ThreadsPerChild
指令
這個指令設(shè)置了每個子進程建立的線程數(shù)。子進程在啟動時建立這些線程后就不再建立新的線程了。如果使用一個類似于mpm_winnt只有一個子進程的MPM,這個數(shù)值要足夠大,以便可以處理可能的請求高峰。如果使用一個類似于worker有多個子進程的MPM,每個子進程所擁有的所有線程的總數(shù)要足夠大,以便可以處理可能的請求高峰。
對于mpm_winnt,ThreadsPerChild的默認值是64;對于其他MPM是25。
ThreadLimit
指令
這個指令設(shè)置了每個子進程可配置的線程數(shù)ThreadsPerChild上限。任何在重啟期間對這個指令的改變都將被忽略,但對ThreadsPerChild的修改卻會生效。
使用這個指令時要特別當心。如果將ThreadLimit設(shè)置成一個高出ThreadsPerChild實際需要很多的值,將會有過多的共享內(nèi)存被分配。如果將ThreadLimit和ThreadsPerChild設(shè)置成超過系統(tǒng)的處理能力,Apache可能無法啟動,或者系統(tǒng)將變得不穩(wěn)定。該指令的值應(yīng)當和ThreadsPerChild可能達到的最大值保持一致。
對于mpm_winnt,ThreadLimit的默認值是1920;對于其他MPM這個值是64。
注意:
Apache在編譯時內(nèi)部有一個硬性的限制"ThreadLimit
"(對于mpm_winnt是"ThreadLimit "),你不能超越這個限制。
ServerLimit
指令
對于preforkMPM,這個指令設(shè)置了MaxClients最大允許配置的數(shù)值。對于workerMPM,這個指令和ThreadLimit結(jié)合使用設(shè)置了MaxClients最大允許配置的數(shù)值。任何在重啟期間對這個指令的改變都將被忽略,但對MaxClients的修改卻會生效。
使用這個指令時要特別當心。如果將ServerLimit設(shè)置成一個高出實際需要許多的值,將會有過多的共享內(nèi)存被分配。如果將ServerLimit和MaxClients設(shè)置成超過系統(tǒng)的處理能力,Apache可能無法啟動,或者系統(tǒng)將變得不穩(wěn)定。
對于preforkMPM,只有在你需要將MaxClients設(shè)置成高于默認值256的時候才需要使用這個指令。要將此指令的值保持和MaxClients一樣。
對于workerMPM,只有在你需要將MaxClients和ThreadsPerChild設(shè)置成需要超過默認值16個子進程的時候才需要使用這個指令。不要將該指令的值設(shè)置的比MaxClients
和ThreadsPerChild需要的子進程數(shù)量高。
注意:
Apache在編譯時內(nèi)部有一個硬限制"ServerLimit
"(對于preforkMPM為"ServerLimit ")。你不能超越這個限制。
配置apache使用workerMPM:
cd httpd-2.0.55
make clean
vi server/mpm/worker/worker.c
修改define
DEFAULT_THREAD_LIMIT 64 為100
即=你要設(shè)置的ThreadsPerChild的值(修改默認ThreadsPerChild
)
修改define
DEFAULT_SERVER_LIMIT 16 為 25
即=你要設(shè)置的ServerLimit值(修改默認ServerLimit值)
:wq
./configure
--prefix=/usr/local/apache --with-mpm=worker
make
make install
cd
/usr/local/apache/conf
vi httpd.conf
修改
StartServers
2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads
75
ThreadsPerChild 25
MaxRequestsPerChild 0
內(nèi)容為
StartServers
3
MaxClients 2000
ServerLimit 25
MinSpareThreads 50
MaxSpareThreads
200
ThreadLimit 200
ThreadsPerChild 100
MaxRequestsPerChild 0
修改
serveradmin servername等信息為正確配置
:wq
/usr/local/apache/bin/apachectl
start
vi /etc/rc.loacl
添加 /usr/local/apache/bin/apachectl
start
PS:
用netstat -an|grep ESTABLISHED|grep 202.100.85.249:80 |wc -l
看連接數(shù),使用worker模式后,httpd進程數(shù)變少不能反映tcp連接數(shù)