记一次cpu使用率100%问题处理办法
最近线上环境客户服务经常突然宕掉,查看进程发现cpu占用率400%。通过top -H -p6902(6920为进程pid)查看线程信息,发现
四个线程cpu使用率几乎占用100%。
通过jstack 101973 |grep -A 10 0x5bd8 (101973为pid,5bd8为线程pid的16进制码),查看发现这四个线程为gc线程。
通过jmap -histo:live 101973 (101973为pid)查看jvm内存使用情况。
发现数组类型和mysql的一个类占用很大内存,初步判断是有一个大查询导致内存被撑爆。于是通过日志大体定位下是哪几个接口,进行排查代码及过滤sql语句,发现sql语句有多表查询但未进行主键外键关联导致只有23条的数据查询出来100多万条数据。
由于一次性查询数据量很大,而且此接口会经常被用到,导致内存被用光。