【问题表现】
某项目压测后发现qps达标,服务器cpu和内存占用均在70%以下,然而mysql服务的内存占用高达100%,且并没有因为压测而产生波动。
【问题排查】
1、查看mysql内存配置
MySQL内存配置为8G,共享内存5G,私有内存3G。共享内存是实例创建时就分配的内存空间,所有连接是共享的;私有内存是用于连接mysql服务器时才分配各自的缓存。)
2、查看连接数
如图所示,长连接数接近500。
运维同学回复这个数量不算多,属于正常范围。
3、查看慢查询
运维同学反馈没有查到慢查询数。
4、查看未压测时mysql的内存占用
1)经运维查看监控,压测前没有业务请求进入时,mysql的内存使用率就达到了60%左右;
2)链接池服务启动后,内存占用就已经达到了98%;
3)压测并发进入后就达到了100%
【解决思路】
1、减少无效的长连接,在不影响业务的情况下,降低程序侧的连接池配置或者降低并发度:查看卡特长连接数为400多,运维侧觉得这个数量不算多,属于合理范围内。并且并发度高是因为做压测,因此该解决方案不可行。
2、优化慢SQL:运维并未查看到慢查询记录,因此该解决方案不可行
3、升级内存配置:该项目UAT环境与线上环境是1:1配置,没有充分理由不能随意升配,因此该解决方案不可行
【最终结论】
我们最关注的事情是:mysql内存占用100%的情况下,对性能有什么影响??最终结论是该种情况为正常的,有以下原因:
原因1:运维侧咨询了腾讯云助手,了解了mysql内存占用100%这个现象是正常的。
原因2:
运维根据腾讯云助手的建议,查看了缓存命中率是处于高水位且使用率变化不明显,不需要进行扩容,可以继续使用。
原因3:
在mysql内存持续100%的情况下,压测多个接口qps均达标,也并未出现其他报错。
【总结】
1、腾讯云平台相关组件的知识可咨询腾讯云助手或者官网文档
2、对mysql服务的监控更多集中在cpu占比、慢查询、长连接等。
参考文档:https://cloud.tencent.com/document/product/236/54792