IBM HTTP Server 主要是由開源的Apache HTTP Server衍生而來,其相應的性能優化也與Apache的相似。
優化主要是由其{HOME}/conf/httpd.conf文件來進行參數調優。
主要的調優方法有:
1.在httpd.conf只加載需要的module:
在Apache HTTP Server能選擇不同功能的module加入配置。這些配置可以是靜態也可以是動態共享(DSO)的加入。DOS的模式可以在開始的時候編譯也可以使用apxs工具在稍後編譯。所以你可以
只加載需要的modules以減少相應的系統開銷。
2.在httpd.conf中的<IfModule mpm_winnt.c>的配置:
mpm_winnt.c是專門針對Windows NT(Server)優化的MPM(多路處理模塊),它使用一個單獨的父進程產生一個單獨的子進程,在這個子進程中輪流產生多個線程來處理請求。也就是說 mpm_winnt只能啓動父子兩個進程, 不能像Linux下那樣同時啓動多個進程。
mpm_winnt主要通過ThreadsPerChild和MaxRequestsPerChild兩個參數來優化Apache,下面詳細來說明一下。
ThreadsPerChild
這個參數用於設置每個進程的線程數, 子進程在啓動時建立這些線程後就不再建立新的線程了. 一方面因爲mpm_winnt不能啓動多個進程, 所以這個數值要足夠大,以便可以處理可能的請求高峯; 另一方面該參數以服務器的響應速度爲準的, 數目太大的反而會變慢。因此需要綜合均衡一個合理的數值。
mpm_winnt上的默認值是64, 最大值是1920. 這裏建議設置爲100-500之間,服務器性能高的話值大一些,反之值小一些。
ThreadLimit
如果需增加Apache的線程數,沒有ThreadLimit行,ThreadPerChildd的值超過了1920,線程最大值也只能達到 1920。
MaxRequestsPerChild
該參數表示每個子進程能夠處理的最大請求數, 即同時間內子進程數目.設置爲零表示不限制, mpm_winnt上的默認值就是0.
官方參考手冊中不建議設置爲0, 主要基於兩點考慮: (1) 可以防止(偶然的)內存泄漏無限進行,從而耗盡內存; (2) 給進程一個有限壽命,從而有助於當服務器負載減輕的時候減少活動進程的數量。
因此這個參數的值更大程度上取決於服務器的內存,如果內存比較大的話可以設置爲0或很大的數字,否則設置一個小的數值。需要說明的是,如果這個值設置的太小的話會造成Apache頻繁重啓,在日誌文件中會看到如下的文字:
Process exiting because it reached MaxRequestsPerChild. Signaling the parent
這樣一來降低了Apache的總體性能。