记一次PHP并发性能调优实战 -- 性能提升104%
文章编写计划
待完成: 详细介绍用到的各个工具
作者: 祝星
适合阅读人群
文中的调优思路无论是php, java, 还是其他任何语言都适用. 如果你有php使用经验, 那肯定就更好了
业务背景
框架及相应环境
- laravel5.7, mysql5.7, redis5, nginx1.15
- centos 7.5 bbr
- docker, docker-compose
- 阿里云 4C和8G
问题背景
php已经开启opcache, laravel也运行了optimize命令进行优化, composer也进行过dump-autoload命令.
首先需要声明的是, 系统的环境中是一定有小问题的(没有问题也不可能能够提升如此大的性能), 但是这些问题, 如果不通过使用合适的工具, 可能一辈子也发现不出来.
本文关注的就是如何发现这些问题, 以及发现问题的思路.
我们首先找到系统中一个合适的API或函数, 用来放大问题.
这个api设计之初是给nginx负载均衡做健康检查的. 使用ab -n 100000 -c 1000 进行压测, 发现qps只能到140个每秒.
我们知道Laravel的性能是出了名的不好, 但是也不至于到这个程度, 从api的编写来看不应该这么低. 所以决定一探究竟.
public function getActivateStatus()
try {
$result = \DB::select('select 1');
$key = 1;
if ($result[0]->$key !== 1) {
throw new \Exception("mysql 检查失败");
} catch (\Exception $exception) {
\Log::critical("数据库连接失败: {$exception->getMessage()}", $exception->getTrace());
return \response(null, 500);
try {
Cache::getRedis()->connection()->exists("1");
} catch (\Exception $exception) {
\Log::critical("缓存连接失败: {$exception->getMessage()}", $exception->getTrace());
return \response(null, 500);