Apache 性能最優(yōu)化分析(9)_Windows教程
教程Tag:暫無Tag,歡迎添加,賺取U幣!
accept串行化:
flock(18, LOCK_UN) = 0
...
flock(18, LOCK_EX) = 0
這兩個調(diào)用可以被上文提到的宏SINGLE_LISTEN_UNSERIALIZED_ACCEPT去掉。
對信號SIGUSR1的處理:
sigaction(SIGUSR1, {SIG_IGN}, {0x8059954, [], SA_INTERRUPT}) = 0
...
sigaction(SIGUSR1, {SIG_IGN}, {SIG_IGN}) = 0
...
sigaction(SIGUSR1, {0x8059954, [], SA_INTERRUPT}, {SIG_IGN}) = 0
引起它們的原因是"溫和重啟"(graceful restart --用SIGUSR1而不是SIGHUP使Apache重新啟動。這種方式為Apache留出了自行處理的余地--譯者注)。當父進程收到SIGUSR1后,它將把這一信號傳遞給所有子進程(同時遞增在共享內(nèi)存中更新計數(shù)器的值"generation counter")。所有空閑的子進程(即在兩次連接之間的子進程)收到信號后將立即終止。所有處于持續(xù)連接(keep-alive)但在兩次請求之間的子進程也將立即終止。但處于連接中并等待第一次請求的子進程將不會立即終止。
為了說明它的必要性,請考慮一個瀏覽器對已關閉連接的處理。如果已關閉的連接是持續(xù)連接,而且下一個請求不是該連接的第一個請求,瀏覽器將不動聲色地建立另一個連接并重新發(fā)出請求。由于服務器任何時候都可能關閉一個持續(xù)連接(可能因為超時或者超過了最大請求數(shù)目),這樣處理是有必要的。但是,如果在回應第一個請求前連接就被關閉,瀏覽器通常會顯?quot;文檔中無數(shù)據(jù)"的對話框(或者顯示被折斷的圖片)。這是在假設服務器非正常終止(或者太忙)的情況下作出的反應。因此,Apache力圖避免在作出任何回應前就關閉連接。這就是處理SIGUSR1的原因。
盡管在理論上避免那三個調(diào)用是可行的,但在粗略的測試中這樣的改進是微不足道的。
相關Windows教程:
- 相關鏈接:
- 教程說明:
Windows教程-Apache 性能最優(yōu)化分析(9)
。