php并发优化
服务器配置
8核e5-2630L 2.4ghz, 16g内存
20MB带宽
问题场景描述
jemter 300并发开始出现502错误
CPU利用率60%
内存利用率50%
网络流量1MB到1.5MB
分析
cpu和内存利用率不高,网络也没有耗尽。肯定是卡在IO上了。
netstat查看TIME_WAIT,数量正常
opcache查看,已开启,没问题
详细查看压测错误,发现压测过程中出现"SQL Error 1040: Too Many Connection"。既然超过连接数,那就查看限制多少连接吧。
mysql参数
max_connections = 2000; # 2000连接,没毛病,问题不在这
到底有多少连接。一看也是惊呆了,大量的sleep连接没有释放。好了这就是原因了。
解决
系统内同时使用了laravel orm,和pdo对象。系统二开,为了方便增加了laravel orm。
那就看看是谁没关闭连接吧。
去掉所有laraval orm的数据库操作,去掉laravel orm连接创建方法。运行测试,发现还是会保留大量sleep mysql connection
去翻pdo创建代码
// 目测就是这个ATTR_PERSISTENT => true了
$this->connection = new \PDO...