2014年9月26日 星期五

Apache prefork MPM 改成 worker MPM

環境:CentOS 6.5 + Apache 2.2 + PHP 5.4

安裝完,預設是以 prefork MPM 方式執行。
執行 apachectl -l 可發現有  prefork.c 模組:
# apachectl -l
Compiled in modules:
  core.c
  prefork.c
  http_core.c
  mod_so.c

將 perfork 修改為 prefork的方法:
  1. 編輯 /etc/sysconfig/httpd,拿掉 #HTTPD=/usr/sbin/httpd.worker 的註解
    HTTPD=/usr/sbin/httpd.worker
  2. 再來直接重新啟動 apache 即可。(因為 /etc/httpd/conf.d/php.conf 預設已經有依不同 MPM 模組,載入不同 PHP模組,所以不需做其他修改。)
    service httpd restart
  3. 再執行 apachectl -l 查看目前狀態,應該會有 worker.c 模組。完成。
    # apachectl -l
    Compiled in modules:
      core.c
      worker.c
      http_core.c
      mod_so.c

其他:
如果使用 phpinfo() 分別在 perfork 和 worker 模式下,查看 PHP設定,可發現有一些地方不一樣。例如,
  • 「Scan this dir for additional .ini files」perfork 讀取「/etc/php.d」資料夾,worker 讀取「/etc/php-zts.d」資料夾,所以修改設定要注意改對地方。
  • 「Thread Safety」perfork 是「disabled」,worker 是「enabled」資料夾,因為 worker 是多執行緒(thread),所以需要線程(thread)安全。

參考:
How can I change from prefork to worker MPM on CentOS 64bit?
Switching Apache from Prefork to Worker MPM in RHEL / CentOS 5.x / Fedora 13

沒有留言:

張貼留言