一、故障起因
起因是用户反馈系统很卡,我登录普罗米修斯一看,发现docker部署得集群下的一个java应用服务器cpu爆了,直接冲到了1000%以上了,接着就是各种接口超时报警等,赶紧打开对应的服务器查看进程情况,这会使用jstack和top命令定位哪个线程占用的cpu比较大,定位代码问题。
二、常见的cpu100%以上异常的情况
程序中存在内存泄漏或者内存溢出,导致 JVM 不断进行垃圾回收;
代码中调用的某些资源造成的死锁或者是代码的死循环导致的cpu超频计算,或者长时间占用cpu的操作,像一些递归的使用、循环操作等等,或者一些特别复杂的正则匹配引起;
程序中存在大量的 IO 操作;
程序中存在大量的数据库操作,导致数据库连接池的耗尽和数据库负载过高。
三、排查方法
排查cpu过高的java导出日志,交给开发排查问题
1.top查看cpu使用率比较高的线程
top打印
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
900635 root 20 0 36.1g 19.4g 70976 S 153.0 30.7 5619:07 java