接口单次执行快,并发慢,性能优化
1 重现问题,构建并发测试----300并发6.7s
处理方案:jmeter构建并发测试,分直接针对接口并发,sql并发
2 数据库服务器cpu,内存分析,
处理方案:查询数据库(4核8g)cpu cpu高达99% (top --> 1)
3 发现kswapd0进程cpu占用300%,
处理方案:kill进程cpu直接10%不到
4 第二天kswapd0进程自启,cpu占用又高飙300%,top发现tsm占用内存,netstat -antlp 发现tsm很多境外ip,确定是木马挖矿病毒,
处理方案::kill -9 tsm进程,删除相关文件及定时任务
5 SHOW FULL PROCESSLIST;发现慢sql,----300并发3s
处理方案:做sql优化,建组合索引,这一步很耗时间
6 查询业务逻辑检查,for循环内部到4次查库,其中一次还嵌套了for循环查库,这直接导致,1次调用接口,如果循环10次,for就要访问数据库最少40次。----300并发1s
处理方案:for循环内部查库,放到循环外,list做参数查询结果,业务逻辑加到for中,减少数据库访问次数