看到了http://blog.phusion.nl/2013/03/12/tuning-phusion-passengers-concurrency-settings/的推荐,打算具体测试一下使用worker MPM对于passenger的性能提升。


实验设定:
实验对象:    自己用Rails写的web service

实验工具: 自己用scala写的基于http://gatling.io/的性能测试代码

两个实验组

  • Prefork MPM(Default) -- Apache 默认的当前MPM

  • Worker MPM -- 需要从prefork换成worker模式

如何从prefork换成worker模式

  1. 替换/etc/sysconfig/httpd文件里的HTTPD=/usr/sbin/httpd 成 HTTPD=/usr/sbin/httpd.worker

  2. 重启Apache


实验结果:

  1. 一般来说使用worker MPM模式的要比prefork模式的快一些, 尤其是Apache还没有生成所有的进程来处理所有的连接。

  2. 当prefork工作模式Apache生成了所有的进程后,这时两者的速度基本上差不多。但是由于这些新生成的httpd进程会消耗很多的memory。


实验结论:

一般来说使用prefork模式是为了兼容性,接入mod_php就和worker不兼容,因为它不是thread-safe的。如果你使用Apache2.4 一下的版本都应该考虑使用worker MPM。 如果你更新到了2.4 可以考虑event MPM。一种新的MPM。可以阅读 http://httpd.apache.org/docs/current/mod/event.html