个人在双核四线程的i5-3230M(Ubuntu)上做PHP-FPM压力测试,在保持Nginx工人进程不变的情况下,开启5个PHP-FPM工作进程和10个PHP-FPM工作进程的测试结果并没有多大区别.
但可以肯定的是,过多的PHP-FPM进程反而会增加CPU上下文切换的开销,除非你的PHP代码中有curl或者file_get_contents这些可能会产生较大网络I/O耗时的代码,这时开更多的PHP-FPM进程可能会好一些.
在php-fpm.conf中把request_slowlog_timeout设为1秒,在slowlog中查看是否有这些耗时超过1秒的代码.优化代码,能够为所有PHP-FPM工作进程减负,这个才是提高性能的根本方法.个人认为,PHP-FPM工作进程数,设置为2倍CPU核心数就足够了.毕竟,Nginx和MySQL以及系统同样要消耗CPU,根据内存来设置PHP-FPM数是非常不合理的,把内存分配给MySQL,Memcached这些服务显然更合适.
内存占用(RES)方面,PHP-FPM的16MB还是很正常的,倒是Nginx占用29MB就比较奇怪了,一般一个Nginx工作进程只会占用不到5MB的内存,所以,也看看Nginx的错误日志,建议安装稳定版本的Nginx.