记一次PHP项目优化及PHP性能测试

背景
  • 最近接手公司一个项目,日峰值QPS大概4万/秒左右,
  • 用了60台机器,42台24核/64G,18台16核20G,峰值时CPU空闲率80%左右
  • Nginx+PHP5.5,CentOS6.6
  • 很明显,性能低下,浪费大量资源,所以决定入手优化
第一步升级PHP7
  • CentOS6.6,Nginx,PHP7.0 (很多原因没能升到7.2),都是系统部提供的默认配置
  • 压力测试对比:旧系统单机16核压测QPS 1500 左右,新环境16核单机3100左右
  • 压测选择的一个业务相对比较简单的接口,没有数据库操作
第二部优化配置/代码
  • 可以说,单独升级带来的性能提升并不理想,所以在配置和代码中继续探究
  • 修改php-fpm配置:pm = static, pm.max_children = 64 fpm进程数改为静态,开启64个
  • listen=/dev/shm/php-fcgi.sock 由监听本地端口改为sock
  • 修改opcache.revalidate_freq=5,脚本文件更新检测周期改为5秒,之前是0,每次都检测
  • 代码中 mcrypt 改为 openssl, mcrypt在php7.2中正式废弃
  • 上述优化后,单机QPS 提升到 4500 左右

其实这个性能仍然并不太满意,代码还有很多可以优化的地方,只是改动比较大,不想承担风险了,所以本次优化就这么结束。机器从60台,减少到现在的50台8核/16G(配置了https,所以机器多了很多)

基础测试
  • 最近看PHP7.3 正式发布了,手痒,拿过来测试下
  • 编译安装后,未修改任何代码,16核机器QPS直接提升到了 6500 左右
  • 有点惊喜,所以做了一系列基础测试

本次测试环境

  • 硬件:16核32G 虚拟机
  • Linux内核:2.6.32-642.15.1.el6.x86_64
  • 系统:
LSB Version:	:base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID:	CentOS
Description:	CentOS release 6.6 (Final)
Release:	6.6
Codename:	Final
  • 以下均为运行10次测试脚本,记录耗时,去掉最大值和最小值后8个值取平均值

基本元素测试

  • 测试for/while/foreach/if/三元表达式

输入图片说明

  • 测试结果表明,PHP7比php5 在各方面都有较大幅度提升
  • php7.3与7.0相比,各项性能均有小幅提升,if语句和三元表达式性能提升较多

函数测试

  • 测试 自定义函数/3层递归调用/strlen/empty/sort
  • sort for循环调用2,000,000次,排序数组为20个元素

输入图片说明

  • 可以发现,php7.3 自定义函数调用性能大幅提升,其他各项略有提升

类与对象

  • 测试普通方法调用/静态调用/extends/trait/abstract

输入图片说明

  • 和函数 比较类似,在普通方法调用上大幅提升,其他方面略有提升或持平

测试代码及结果

可能我的测试不是很标准,这里放出测试代码,供大家参考,指正。 https://gitee.com/664712890/PHP-Performance-Testing/

压测工具

最后推荐一个非常好用的压测工具:https://github.com/tsenart/vegeta

转载于:https://my.oschina.net/u/237940/blog/2994304

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值