一、数据库连接池不释放
压测进行一段时间后,响应报"XX time out"等连接超时的错误
定位方法:
(1)通过命令:SHOW VARIABLES LIKE '%max_connections%'; 查询设置的最大连接数
(2)通过命令:show status like 'Threads%';查询当前的连接数是多少(show processlist/show full processlist等命令也是可以的 )
如果当前连接数大于等于最大连接数,说明数据库连接池被占满,需要把最大连接数修改大一点(一般在/etc/my.cnf里面修改 max_connections = xxxx 或通过命令:set global max_connections=xxxx 进行设置)
(3)再重新进行压测,如果还是出现数据库连接池被占满的情况,则可以定位到是数据库连接池没释放导致的性能问题
解决方法:
通过代码看一下是不是只有创建连接而没关闭连接,需要开发进行解决
二、数据库死锁
压测一段时间后,报连接超时的错误,或在压测的过程中点击程序的某些按钮,程序无响应等
定位方法:
(1)通过查看数据库服务器的日志来定位是否有死锁的情况
三、TPS一直上不去(响应时间长)
1. 网络带宽的问题(压测一般在内网进行,带宽的问题暂时先忽略)
2. 压测机的问题
3. 硬件资源的问题(应用服务器,数据库服务器)
4. 线程池或数据库连接池的问题
5. 垃圾回收机制的问题
6. 业务逻辑的问题
7. 系统架构的问题
欢迎各位大佬指导