日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

FreeBSD下Apache2.0運(yùn)行模型分析及性能調(diào)整( 二 )


在我實(shí)際的工作中,Linux和Solaris上使用worker MPM都運(yùn)行得不錯(cuò),性能確實(shí)有提高,雖然在Linux(Redhat9)上出現(xiàn)過負(fù)載突然增大數(shù)倍時(shí),Apache線程無法正常工作的情形,但發(fā)現(xiàn)主要原因還是配置參數(shù)過度優(yōu)化,并加載了一些有沖突的模塊,并不是Linux系統(tǒng)本身的問題 。而Solaris 9 for SPARC是工作得最好的平臺(tái),可以完全按照筆者的配置工作,沒有出現(xiàn)任何問題 。
下面我以FreeBSD4.8為平臺(tái),說明在Apache2.0中如何指定MPM。先解壓縮源代碼包httpd-2.0.46.tar.gz生成httpd-2.0.46目錄,(BTW:Apache1.3源代碼包的命名規(guī)則是apache_1.3.NN.tar.gz,而2.0則是httpd-2.0.NN.tar.gz——其中NN是次版本號(hào)) 。
進(jìn)入httpd-2.0.46錄,運(yùn)行: ./configure --help|grep mpm 會(huì)顯示 --with-mpm=MPM Choose the process model for Apache to use.
MPM={beos|worker|prefork|mpmt_os2|perchild|leader|threadpool}這里就是用來選擇要使用的進(jìn)程模型,也就是哪種MPM模塊 。beos,mpmt_os2分別是BeOS和OS/2上的缺省MPM,perchild的主要設(shè)計(jì)目的是以不同的用戶和組的身份來運(yùn)行不同的子進(jìn)程,這在運(yùn)行多個(gè)需要CGI的虛擬主機(jī)時(shí)特別有用,Apache官方文檔說它會(huì)比1.3中的SuExec機(jī)制做的更好 。leader和threadpool都是基于worker的變體,還處于實(shí)驗(yàn)性階段,某些情況下并不會(huì)按照預(yù)期設(shè)想的那樣工作,所以Apache官方也并不推薦使用 。( 有關(guān)其他的MPM的詳細(xì)說明,請(qǐng)參見Apache官方文檔: http://httpd.apache.org/docs-2.0/mod/ ) 。
如果不用--with-mpm顯式指定某種MPM的話,那么prefork就是Unix平臺(tái)上的缺省MPM.它所采用的方式是預(yù)派生子進(jìn)程的方式,這事實(shí)上也就是Apache1.3中所采用的模式 。它本身并沒有使用到線程,2.0使用它是為了與1.3保持兼容性,另一方面,prefork用單獨(dú)的子進(jìn)程來處理不同的請(qǐng)求,進(jìn)程之間是彼此獨(dú)立的,這也使得它成為最穩(wěn)定的MPM.對(duì)比prefork,worker是2.0 中全新的支持多線程和多進(jìn)程混合模型的MPM 。由于使用線程來處理請(qǐng)求,所以,可以處理相對(duì)海量的請(qǐng)求,而系統(tǒng)資源的開銷小于基于進(jìn)程的服務(wù)器 。但是,它也使用了多進(jìn)程,每個(gè)進(jìn)程又生成多個(gè)線程,以獲得基于進(jìn)程的服務(wù)器的穩(wěn)定性 。筆者認(rèn)為這種MPM的工作方式將是Apache 2.0以后的發(fā)展趨勢(shì) 。
若使用prefork,在make編譯和make install安裝后,使用httpd –l來確定當(dāng)前使用的MPM,應(yīng)該會(huì)看到prefork.c(如果看到worker.c就說明使用的是worker MPM,依此類推)注意 :不象在Linux和Solaris,在FreeBSD上用正常方式--with-mpm=worker是無效的??!即使這么做在安裝后也只能看到prefork.c即prefork模式?。∪绻慵?xì)心的話在configure過程中你會(huì)看到 Applying APR hints file rules for i386-unknown-freebsd4.8
setting enable_threads to "no"
APR will be non-threaded
The currently selected MPM requires threads which your system seems to lack不過這并不說明一定不能在FreeBSD上使用線程,其實(shí)在configure時(shí)有個(gè)未公開的選項(xiàng)--enable-threads ,它在configure --help時(shí)是看不到的 。顯式加上它就可以以worker MPM來配置編譯Apache2.0了,但是雖然編譯沒有問題,可是Apache起動(dòng)后根本無法正常工作,瀏覽器會(huì)一直等待回應(yīng)(在FreeBSD4.8,5.1上均不行),個(gè)人認(rèn)為FreeBSD在高端還有很長(zhǎng)的路要走,線程,PAE,SMP--雖然5.1有了不小的改進(jìn)但仍然不是十分完善 。
因此,對(duì)于FreeBSD來說,prefork幾乎還是目前的唯一MPM,我在下面主要還是討論它的工作原理和相關(guān)指令調(diào)整 。
查看缺省生成的httpd.conf配置文件,會(huì)發(fā)現(xiàn)里面包含如下的配置段:
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClIEnts 150
MaxRequestsPerChild 0
prefork的工作原理是這樣的:控制進(jìn)程在最初建立StartServers個(gè)子進(jìn)程后, 為了滿足MinSpareServers設(shè)置的需要,創(chuàng)建一個(gè)進(jìn)程,等待一秒鐘,繼續(xù)創(chuàng)建第二個(gè),等待一秒鐘,繼而創(chuàng)建四個(gè),如此按指數(shù)級(jí)增加創(chuàng)建的進(jìn)程數(shù),最多達(dá)到每秒32個(gè),直到滿足MinSpareServers設(shè)置的值為止,這也就是預(yù)派生(prefork)的由來 。這種模式可以使得不必在請(qǐng)求到來時(shí)再產(chǎn)生新的進(jìn)程,從而減小了系統(tǒng)開銷以增加性能 。

推薦閱讀