现象: 经过对php-fpm进程数的调整,从4一直到200,对于claroline来说,最优的结果是CPU数x2,多了或少了,都影响性能。 在用ab进行测试的时候,不论哪种情况,只要超过cpux2的时候,top中都会出现大量的lockf,性能便会下降。 但是无论怎么调整php-fpm和nginx的参数,并发超过200的时候,ab就会报length错误,并且是大量的错误。同时在nginx-error.log中,出现大量的“Connection reset by peer”(如果是socket的话,会出现“unix:/tmp/php.socket failed (61: Connection refused)”)。 并发数不超过200没有错误,250并发的时候,>64个php-fpm进程没错误;300并发需要128以上的进程数,并且每秒的页面数只能是最大值的1/4-1/5左右。 四核机器,php进程为8的时候,没有错误,也没有lockf,index的数目大约是220,为12的时候就成为170,16就成了120,48大约70,64大约50,128以上大约35。 网上说的方法,基本上都用遍了,仍然不能解决。 原因(只是自已猜测,没查到权威的解释): nginx发起的连接数,远远超过了php-fpm所能处理的数目,导致端口(或socket)频繁被锁,造成堵塞。 解决思路: 把php-fpm分为两部分,每部分各听一个端口或socket,这样就减少了lock 方案: 1、fpm2的调整(FreeBSD下) (1)复制php-fpm.conf为php-fpm2.conf,并修改占用的端口(socket) (2)复制rc.d/php-fpm为rc.d/php-fpm2,进行修改,把所有的fpm都替换为fpm2,并添加:
2、nginx的调整:
3、用socket的优化: 用md系统,要比普通文件系统快很多。 善后?: Session会不会遇到麻烦? (责任编辑:IT) |