大家好,小編來(lái)為大家解答以上問(wèn)題。詳解apache中并發(fā)控制參數(shù)prefork理解和調(diào)優(yōu)很多人還不知道,現(xiàn)在讓我們一起來(lái)看看吧! 一個(gè)apache有l(wèi)inux下的并發(fā)不是很高的,大約到3K的樣子,普通的服務(wù)器都會(huì)不同程度的出現(xiàn)問(wèn)題.apache有關(guān)并發(fā)控制主要是 prefork和worker二個(gè)其中一個(gè)來(lái)控制.我們可以使用httpd -l來(lái)確定當(dāng)前使用的MPM是prefork.c,還是Worker.c.下面是apache中有關(guān)prefork的配置.下面是我優(yōu)化過(guò)的參數(shù). #有這個(gè)參數(shù)就不必像apache1一樣修改源碼才能修改256客戶數(shù)的限制,聽(tīng)講要放到最前面才會(huì)生效,2000是這個(gè)參數(shù)的最大值 ServerLimit 2000 #指定服務(wù)器啟動(dòng)時(shí)建立的子進(jìn)程數(shù)量,prefork默認(rèn)為5。 StartServers 25 #指定空閑子進(jìn)程的最小數(shù)量,默認(rèn)為5。如果當(dāng)前空閑子進(jìn)程數(shù)少于MinSpareServers ,那么Apache將以最大每秒一個(gè)的速度產(chǎn)生新的子進(jìn)程。此參數(shù)不要設(shè)的太大。 MinSpareServers 25 #設(shè)置空閑子進(jìn)程的最大數(shù)量,默認(rèn)為10。如果當(dāng)前有超過(guò)MaxSpareServers數(shù)量的空閑子進(jìn)程,那么父進(jìn)程將殺死多余的子進(jìn)程。此參數(shù) 不要設(shè)的太大。如果你將該指令的值設(shè)置為比MinSpareServers小,Apache將會(huì)自動(dòng)將其修改成"MinSpareServers+1"。 MaxSpareServers 50 #限定同一時(shí)間客戶端最大接入請(qǐng)求的數(shù)量(單個(gè)進(jìn)程并發(fā)線程數(shù)),默認(rèn)為256。任何超過(guò)MaxClients限制的請(qǐng)求都將進(jìn)入等候隊(duì)列,一旦一個(gè)鏈接被釋放,隊(duì)列中的請(qǐng)求將得到服務(wù)。要增大這個(gè)值,你必須同時(shí)增大ServerLimit 。 MaxClients 2000 #每個(gè)子進(jìn)程在其生存期內(nèi)允許伺服的最大請(qǐng)求數(shù)量,默認(rèn)為10000.到達(dá)MaxRequestsPerChild的限制后,子進(jìn)程將會(huì)結(jié)束。如果MaxRequestsPerChild為"0",子進(jìn)程將永遠(yuǎn)不會(huì)結(jié)束。 MaxRequestsPerChild 10000 將MaxRequestsPerChild設(shè)置成非零值有兩個(gè)好處: 1.可以防止(偶然的)內(nèi)存泄漏無(wú)限進(jìn)行,從而耗盡內(nèi)存。 2.給進(jìn)程一個(gè)有限壽命,從而有助于當(dāng)服務(wù)器負(fù)載減輕的時(shí)候減少活動(dòng)進(jìn)程的數(shù)量。 工作方式: 一個(gè)單獨(dú)的控制進(jìn)程(父進(jìn)程)負(fù)責(zé)產(chǎn)生子進(jìn)程,這些子進(jìn)程用于監(jiān)聽(tīng)請(qǐng)求并作出應(yīng)答。Apache總是試圖保持一些備用的 (spare)或者是空閑的子進(jìn)程用于迎接即將到來(lái)的請(qǐng)求。這樣客戶端就不需要在得到服務(wù)前等候子進(jìn)程的產(chǎn)生。在Unix系統(tǒng)中,父進(jìn)程通常以root身 份運(yùn)行以便邦定80端口,而 Apache產(chǎn)生的子進(jìn)程通常以一個(gè)低特權(quán)的用戶運(yùn)行。User和Group指令用于設(shè)置子進(jìn)程的低特權(quán)用戶。運(yùn)行子進(jìn)程的用戶必須要對(duì)它所服務(wù)的內(nèi)容有 讀取的權(quán)限,但是對(duì)服務(wù)內(nèi)容之外的其他資源必須擁有盡可能少的權(quán)限。 我們調(diào)優(yōu)常常要查看httpd進(jìn)程數(shù)(即prefork模式下Apache能夠處理的并發(fā)請(qǐng)求數(shù)): #ps -ef | grep httpd | wc -l 出現(xiàn)的結(jié)果,就是當(dāng)前Apache能夠處理的多少個(gè)并發(fā)請(qǐng)求,這個(gè)值A(chǔ)pache根據(jù)負(fù)載情況自動(dòng)調(diào). 查看Apache的并發(fā)請(qǐng)求數(shù)及其TCP連接狀態(tài): #netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ 上面這句來(lái)自己我一個(gè)新浪的朋友張宴. 返回結(jié)果示例: LAST_ACK 5 SYN_RECV 30 ESTABLISHED 1597 FIN_WAIT1 51 FIN_WAIT2 504 TIME_WAIT 1057 其中的SYN_RECV表示正在等待處理的請(qǐng)求數(shù);ESTABLISHED表示正常數(shù)據(jù)傳輸狀態(tài);TIME_WAIT表示處理完畢,等待超時(shí)結(jié)束的請(qǐng)求數(shù)。 狀態(tài):描述 CLOSED:無(wú)連接是活動(dòng)的或正在進(jìn)行 LISTEN:服務(wù)器在等待進(jìn)入呼叫 SYN_RECV:一個(gè)連接請(qǐng)求已經(jīng)到達(dá),等待確認(rèn) SYN_SENT:應(yīng)用已經(jīng)開(kāi)始,打開(kāi)一個(gè)連接 ESTABLISHED:正常數(shù)據(jù)傳輸狀態(tài) FIN_WAIT1:應(yīng)用說(shuō)它已經(jīng)完成 FIN_WAIT2:另一邊已同意釋放 ITMED_WAIT:等待所有分組死掉 CLOSING:兩邊同時(shí)嘗試關(guān)閉 TIME_WAIT:另一邊已初始化一個(gè)釋放 LAST_ACK:等待所有分組死掉 可以使用Linux下的webbench來(lái)作壓力測(cè)試. 以上詳解apache中并發(fā)控制參數(shù)prefork理解和調(diào)優(yōu)就是小編為大家收集整理的全部?jī)?nèi)容了,希望對(duì)大家有所幫助。如果您喜歡這篇文章,可以收藏或分享給您的小伙伴們吧!歡迎持續(xù)關(guān)注我們的后續(xù)更新。 |
免責(zé)聲明:本站部分文章和圖片均來(lái)自用戶投稿和網(wǎng)絡(luò)收集,旨在傳播知識(shí),文章和圖片版權(quán)歸原作者及原出處所有,僅供學(xué)習(xí)與參考,請(qǐng)勿用于商業(yè)用途,如果損害了您的權(quán)利,請(qǐng)聯(lián)系我們及時(shí)修正或刪除。謝謝!
始終以前瞻性的眼光聚焦站長(zhǎng)、創(chuàng)業(yè)、互聯(lián)網(wǎng)等領(lǐng)域,為您提供最新最全的互聯(lián)網(wǎng)資訊,幫助站長(zhǎng)轉(zhuǎn)型升級(jí),為互聯(lián)網(wǎng)創(chuàng)業(yè)者提供更加優(yōu)質(zhì)的創(chuàng)業(yè)信息和品牌營(yíng)銷服務(wù),與站長(zhǎng)一起進(jìn)步!讓互聯(lián)網(wǎng)創(chuàng)業(yè)者不再孤獨(dú)!
掃一掃,關(guān)注站長(zhǎng)網(wǎng)微信