Wednesday, January 20, 2010

修正 Apache Worker MPM 與 APC 設定

最近觀察主機,常常會難連線,可是一切卻又運作中。觀察圖表,發現是記憶體暴增,然後就吃到 SWAP 去,結果就是狂 hang 住。應該是常常有 spam 公司來幫忙測試主機,所以 request 太多,就暴了!

現在小小的主機、慢慢的 CPU、少少的 RAM 實在沒辦法像 Pixnet 這樣借人家測主機XD。所以只好修正一下參數,目前測試下來,這樣的設定是最 OK 的,雖然 Request 多的時候還是會連線稍慢一點點,不過至少 Performance好很多。

目前主機配置是:PIII-800、384Ram,就是這麼遜,所以各位 Spam 大哥不要來亂了!

Worker MPM 配置如下:


StartServers 1
ServerLimit 3
MaxClients 100
MinSpareThreads 25
MaxSpareThreads 50
ThreadLimit 50
ThreadsPerChild 50
MaxRequestsPerChild 10000

分享一下參數設定的心得好了:

「StartServers」就是剛啟動時要先生出來的 httpd 程序數量,而「ServerLimit」定義了最大程序數量,每個程序裡面會包含「ThreadsPerChild」個 Thread(每個 Thread都可以應對一個 Request,不需要傳統那樣一個 Request 就需要一個程序。而當不夠的時候,他會自動增加 Thread 或 Child 來處理),「MinSpareThreads」和「MaxSpareThreads」定義了最少和最多的空閒 Thread 數量。接著,這邊用「ThreadLimit」來限制了每個 Child 的最大 Thread 數量。而「ThreadPerChild」和「ServerLimit」的乘績決定了「MaxClients」的上限,也就是能夠承受的最大 Request 數量。最後是「MaxRequestsPerChild」,決定了 Child 接受了幾個 Request 之後就要關閉,等待如果需要才重新產生一個程序。預設是零,也就是不結束,不過我比較喜歡重新產生,可以避免安全問題,更重要的是不需要那麼多程序時不會佔用著資源。

調整的時候,可以搭配 ab 壓力測試:

ab -c 同時連線數量 -n 每個連線的Request數量

這個設定可以讓我的主機 Lifetype 部分稱到 ab -c 50 -n500 才 timeout 結束,但是 SWAP 還在 50M 以下。如果是靜態網頁、galler2、 其他 php 等等,更可以撐到 ab -c 100 -n 1000 以上沒問題。接著會觀察看看,希望不會再 hang 死。



另外,也調整了一下 apc 的設定,之前的 ttl 實在太可怕,迴響、文章發表更新,都要等很久,目前用了一陣子很滿意的設定是:

[APC]
apc.stat=0
apc.enabled=1
apc.shm_segments=1
apc.shm_size=128
apc.ttl=300
apc.user_ttl=300
apc.num_files_hint=1024
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.enable_cli=1

ttl 設定成 300 second,這樣快取命中率還是高達 96%,快取大約是 50M 上下,快取表現、更新速度也都符合需要。

參考看看。

No comments: