PHP性能优化

背景

一个项目,甲方要求 TPS 达到 5000。框架是yii2。

解决过程

在此之前,并没有碰到过此类提出明确性能指标的项目,这次算是头一次。刚开始拿到这个需求的时候并没有什么头绪,不知从何处下手,现在回过头来看,出现这样的情绪非常的正常。
不知道怎么办的时候,先找搜索引擎,查查看,搜集下相关的信息,主要是找找方向。
经过一番搜寻,大致有这么几个方面
1.PHP开启opcache
2.代理服务器(nginx)配置调整
3.php-fpm配置优化
4.代码,业务逻辑优化
5.内核参数优化

有了方向之后,逐条去确认就可以了,根据实际的压测指标,opcache 的开启对性能提升很大,具体操作如下

vim php.ini

新增
zend_extension=opcache.so  #这里要注意的是 zend_extension,不是 extension

php -m 下看到
[Zend Modules]
Opcache
即说明已经开启

php-fpm 的参数优化

vim php-fpm.conf

pm.max_children               #php-fpm可创建的最大的进程数
pm.start_servers              #php-fpm进程启动创建的进程数
pm.min_spare_servers          #php-fpm管理的进程数不能小于它,start_servers不能小于它
pm.max_spare_servers          #php-fpm管理的最大进程数

通过对压测指标(ab测试)以及 top 命令的观察,此调整也有很明显的效果,并且 php 对内存的消耗并不高,给了我另外一个思路,CPU 核数对性能的影响,后面也测试了不同核数对性能的影响。

多核的影响
前面发现对 php-fpm 的配置进行了大幅的提升之后,内存消耗并没有明显变化,根据分析,增加 CPU 可能会对性能有影响。

配置对比
8cpu  32g  395
16cpu 16g  831
32cpu 32g  432

压测的指标很明确,cpu 核数的增加确实会对性能有提升,但也不是越多越好,需要根据数据找到一个合适的配置。

nginx 的配置优化

worker_processes        #一般与CPU核数相同
worker_connection
use epoll

实际的压测指标也有不小的提升

内核参数优化

net.ipv4.tcp_max_tw_buckets 
net.ipv4.tcp_sack
net.ipv4.tcp_window_scaling
...

这里的配置较多,有提升,幅度不大,聊胜于无。

经过上面的这些优化之后,较最初的测试指标提升到2.x倍。

本作品采用《CC 协议》,转载必须注明作者和本文链接
城里的野山参
讨论数量: 5

优化好数据库,PHP就是多部署几台服务器的事儿。

3周前 评论
城里的野山参 (楼主) 2周前

webman 分分钟达到

3周前 评论

fpm 类型 框架5000 并发 基本无望

3周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!