在做高并发测试的时候,发现了几个小问题,记录一下解决过程
1.并发数量超过一定数量,由于部分并发可能出现死锁或其他问题,需要加入事务。注意:先插入数据库,再清除缓存,可避免某些不明原因导致的缓存和实际数据不一致的情况。
Db::transaction(function () {
// 先操作数据库, 后设置redis 缓存
});
2.并发数量不算大,但是请求成功数量却寥寥无几?试着优化 MPM 模块配置。
①在 apache/conf/httpd.conf 找到
# Server-pool management (MPM specific)
Include conf/extra/httpd-mpm.conf
去掉 “Include conf/extra/httpd-mpm.conf”前面的 #
②修改Apache 服务器的MPM 模块对应的节点参数设置。
输出 phpinfo(); 查找"mpm" 即可看到节点名称。我的是“mpm_winnt”。
在httpd_mpm.conf 中找到对应的“mpm_winnt_module”,修改
ThreadsPerChild 1000 #推荐设置:小型网站=1000 中型网站=1000~2000 大型网站=2000~3500
MaxConnectionsPerChild 10000 #推荐设置:小=10000 中或大=20000~100000
ThreadsPerChild 控制每个子进程使用的线程数量
MaxConnectionsPerChild 每个服务器子进程被终止前可处理的最大连接数
3.设置my.ini 。(windows 下是mysql/bin/my.ini ,Linux 下是my.cnf)
[mysqld]
thread_cache_size = 256
max_connections = 1000
重启Apache、Mysql ,再次并发测试。请求成功次数多了很多,数据库记录准确。