记一次php压测性能影响很大的参数

时间:2021-09-08
本文章向大家介绍记一次php压测性能影响很大的参数,主要包括记一次php压测性能影响很大的参数使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1. 背景说明

  因为公司项目架构升级,公司部分项目由云服务器环境迁移至云k8s环境,迁移业务主要为游戏官方网站以及游戏活动网站,由PHP语言编写。

  在云服务器上时,1C2G的云服务器性能压测可以跑每秒200左右的并发,在迁移至了k8s环境中,每秒并发只有70。并且在并发70的时候,php程序的CPU资源已经使用率在百分之90以上,排查了ingress、nginx、以及数据库,压测机器,都没有到达瓶颈。甚至怀疑排查可能因为多次跳转而导致的网络损耗,导致性能衰减3倍以上。甚至怀疑是php放入容器性能不好。

  后面仔细想想,容器对性能损耗没有这么厉害,即使因为架构特殊,请求需要先到ingress,然后再到nginx,但是php的cpu资源实实在在是使用满的。于是检查了一下php的模块。后面问题得到解决。在解决问题前,先解释一下本环境的简要架构以及流量走向。

 

2. 流量走向

  由于环境特殊,所以域名无法更改,所以就想了一个比较委婉的办法,将老的LB的请求转发到k8s集群中的ingress的nodeport(自己修改增加的参数)。

  为什么不转到新集群的lb?因为lb无法反向代理请求到lb,所以只能打开k8s集群中ingress的nodeport。

  简单来说,架构流量走向如下:

  LB   →     ingress    →    nginx   →   php

  并且由于环境特殊,如www.baidu.com/gcc/mh1的请求,在ingress这里做了一个跳转,这里www.baidu.com/gcc/mh1是用户的请求,但是在最后nginx的配置中,请求只有www.baidu.com,这里ingress做了一个rewrite /gcc/mh1/api/(.*) /index.php?s=/$1 break;的操作,剥离用户输入的gcc/mh1,将请求转入后端没有,到最后的nginx的时候,请求只剩www.baidu.com.

 

3. 问题解决

  在考虑到ingress,nginx,mysql都没有瓶颈的情况下,突然想到是不是php有性能影响非常大的配置没有调整,突然想到了一个缓存模块,于是检查缓存模块opcache,在刻录docker镜像的时候,果然没有安装。安装之后1c2g每秒并发在330左右,提升了快5倍,问题解决。

  于是顺便调整了 php-fpm的子进程数量由动态调整至静态,由3个进程调整至了20个进程,当然,性能提升没有opcache那么明显。

  注意:这里opcache不做过多解释,仅贴出docker build时的安装方式。

FROM php:7.3-fpm-alpine
RUN docker-php-ext-install pdo pdo_mysql opcache bz2 calendar zip exif gd gettext gmp ldap   #安装opcache模块
RUN apk add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone \
    && apk del tzdata
ADD ./www.conf /usr/local/etc/php-fpm.d/   #调整php-fpm子进程个数

 

作者:小家电维修

相见有时,后会无期。

原文地址:https://www.cnblogs.com/lizexiong/p/15244859.html