适合阅读人群
文中的调优思路无论是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(nul