记一次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
- oclhashcat:离线hash密码破解工具官方文档(中文版)
- 如何动态加载js?
- 【自然框架】数据访问之精雕细琢(一)存储过程的参数
- 100w条记录分页,可以有多快?—— DataReader分页与SQL语句分页的对比测试(在线演示)
- Mimikatz小实验:黄金票据+dcsync
- 【自然框架】n级下拉列表框的原理
- 【自然框架】分享 n级联动下拉列表框
- GSM Hacking Part ②:使用SDR捕获GSM网络数据并解密
- 【自然框架】之数据访问 —— 再小的类库也需要设计。
- 【自然框架】之表单控件(一)实体类(Class)VS 字典(Dictionary)
- 跨平台后门Mokes现已加入OS X豪华午餐
- 【问底】严澜:数据挖掘入门——分词
- 机器学习-简单线性回归教程
- NSA(美国国安局)泄漏Exploit分析
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- [网络安全] 二.Web渗透信息收集之域名、端口、服务、指纹、旁站、CDN和敏感信息
- 程序员进阶系列:你真的懂 HelloWorld 吗?
- 零基础Python教程040期 序列分片技术
- JS实现图片弹窗效果
- [网络安全] 一.Web渗透入门基础与安全术语普及
- 多线程系列(二)之Thread类
- 多线程系列(三)之线程池
- 13 个 JavaScript 数组精简技巧
- 增强型的 <input type=number>
- Python-sqlite3-08-往数据库中写入Excel中信息
- 键盘敲入 A 字母时,操作系统期间发生了什么...
- 类与对象」NSObject对象的分类
- 如何取SQL结果集的第一条记录
- postman的使用技巧
- Nodejs Serialport文档翻译