PHP性能优化

PHP技术
551
0
0
2022-08-29
标签   PHP-FPM

背景

一个项目,甲方要求 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倍。