PHP头条
热点:

Nginx+PHP-FPM优化技巧总结


【原创】Nginx+PHP-FPM优化技巧总结
php-fpm的安装很简单,参见PHP(PHP-FPM)手动编译安装。下面主要讨论下如何提高Nginx+Php-fpm的性能。
1.Unix域Socket通信
之前简单介绍过Unix Domain Socket这种通信方式,参见:Nginx+PHP-FPM的域Socket配置方法
Unix域Socket因为不走网络,的确可以提高Nginx和php-fpm通信的性能,但在高并发时会不稳定。 Nginx会频繁报错:      connect() to unix:/dev/shm/php-fcgi.sock failed (11: Resource temporarily unavailable) while connecting to upstream
可以通过下面两种方式提高稳定性: 1)调高nginx和php-fpm中的backlog      配置方法为:在nginx配置文件中这个域名的server下,在listen 80后面添加default backlog=1024。      同时配置php-fpm.conf中的listen.backlog为1024,默认为128。 2)增加sock文件和php-fpm实例数      再新建一个sock文件,在Nginx中通过upstream模块将请求负载均衡到两个sock文件背后的两套php-fpm实例上。


2.php-fpm参数调优
2.1进程数
php-fpm初始/空闲/最大worker进程数      pm.max_children = 300      pm.start_servers = 20      pm.min_spare_servers = 5      pm.max_spare_servers = 35
2.2最大处理请求数
最大处理请求数是指一个php-fpm的worker进程在处理多少个请求后就终止掉,master进程会重新respawn一个新的。 这个配置的主要目的是避免php解释器或程序引用的第三方库造成的内存泄露。      pm.max_requests = 10240
2.3最长执行时间
最大执行时间在php.ini和php-fpm.conf里都可以配置,配置项分别为max_execution_time和request_terminate_timeout。 其作用及其影响参见:Nginx中502和504错误详解


3.php-fpm的高CPU使用率排查方法
3.1CPU使用率监控方法
1)top命令 直接执行top命令后,输入1就可以看到各个核心的CPU使用率。而且通过top -d 0.1可以缩短采样时间。 下面的sar貌似最短只能是1秒。
2)sar命令 sar和iostat命令的安装:      sysstat.x86_64 : The sar and iostat system monitoring commands      yum install -y sysstat.x86_64
执行sar -P ALL 1 100。-P ALL表示监控所有核心,1表示每1秒采集,100表示采集100次。 输出结果如下: CPU     %user     %nice   %system   %iowait    %steal     %idle all     85.54      0.00      5.69      0.00      0.00      8.76   0     74.75      0.00     25.25      0.00      0.00      0.00   1     98.00      0.00      2.00      0.00      0.00      0.00   2     89.22      0.00      3.92      0.00      0.00      6.86   3     91.00      0.00      2.00      0.00      0.00      7.00   4     75.00      0.00      9.00      0.00      0.00     16.00   5     94.95      0.00      5.05      0.00      0.00      0.00   6     95.00      0.00      4.00      0.00      0.00      1.00   7     87.88      0.00      4.04      0.00      0.00      8.08   8     93.94      0.00      3.03      0.00      0.00      3.03   9     88.00      0.00      3.00      0.00      0.00      9.00 10     89.11      0.00      2.97      0.00      0.00      7.92 11     82.35      0.00      3.92      0.00      0.00     13.73 12     73.27      0.00      7.92      0.00      0.00     18.81 13     81.44      0.00      4.12      0.00      0.00     14.43 14     77.23      0.00      6.93      0.00      0.00     15.84 15     78.79      0.00      4.04      0.00      0.00     17.17
3.2开启慢日志
配置输出php-fpm慢日志,阀值为2秒:
request_slowlog_timeout = 2
slowlog = log/$pool.log.slow

利用sort/uniq命令分析汇总php-fpm慢日志: [root@b28-12 log]# grep -v "^$" www.log.slow.tmp | cut -d " " -f 3,2 | sort | uniq -c | sort -k1,1nr | head -n 50    5181 run() /www/test.net/framework/web/filters/CFilter.php:41    5156 filter() /www/test.net/framework/web/filters/CFilterChain.php:131    2670 = /www/test.net/index.php    2636 run() /www/test.net/application/controllers/survey/index.php:665    2630 action() /www/test.net/application/controllers/survey/index.php:18    2625 run() /www/test.net/framework/web/actions/CAction.php:75    2605 runWithParams() /www/test.net/framework/web/CController.php:309    2604 runAction() /www/test.net/framework/web/filters/CFilterChain.php:134    2538 run() /www/test.net/framework/web/CController.php:292    2484 runActionWithFilters() /www/test.net/framework/web/CController.php:266    2251 run() /www/test.net/framework/web/CWebApplication.php:276    1799 translate() /www/test.net/application/libraries/Limesurvey_lang.php:118    1786 load_tables() /www/test.net/application/third_party/php-gettext/gettext.php:254
www.phpzy.comtrue/phprm/11926.htmlTechArticleNginx+PHP-FPM优化技巧总结 【原创】Nginx+PHP-FPM优化技巧总结 php-fpm的安装很简单,参见PHP(PHP-FPM)手动编译安装。下面主要讨论下如何提高NginxPhp-fpm的性能。 1.Unix域Socket通信 之前简单介绍过...

相关文章

相关频道:

PHP之友评论

今天推荐