Apache在prefork mode下,一個process同時間只能服務一條connection,而worker mode一個thread只能服務一條connection,他們都是blocking mode,一旦所有的process/thread被block住,就沒辦法再服務新的connection,系統全部都在等待io,CPU使用率相對很低。
Event MPM mode可以解決上述問題。
(題外話,就算是把fd設定成non-blocking,搭配polling (select())的方式,其反應速度仍遠不及event-driven,因為fd數目越多polling的時間就會越久,而且polling也是很浪費CPU的。Event-driven的高效能要在current connection量大時才看得出來,特別是keep-alive的connection。)
不過官方網站寫著event mode目前還在實驗階段:
Warning
This MPM is experimental, so it may or may not work as expected.
編譯與設定可以參考
Configure參數
./configure --with-mpm=event #主要是加這個參數
httpd.conf設定檔
StartServers 1 ServerLimit 1 MaxClients 50 MinSpareThreads 1 MaxSpareThreads 10 ThreadsPerChild 50 MaxRequestsPerChild 0
Benchmark在上面的連結中也有提到。
沒有留言:
張貼留言