生产环境出现CPU占用过高,分析思路和定位

top 定位cpu占比高的pid
jps -l 定位具体是后台哪个应用程序
ps -mp 进程id -o(自定义格式) THREAD,tid,time 定位当前进程所有线程占用cpu时间高的线程id
jstack 进程id | grep tid(线程id转换为英文小写16进制格式) -A行数 定位到具体某一行代码引起的

案例演示

程序跑一下

开始进行定位分析

 

 

线上系统的CPU负载过高的两个常见场景

第一个场景:是你自己在系统里创建了大量的线程, 这些线程同时并发运行,而且工作负载都很重,过多的线程同时并发运行就会导致你的机器CPU负载过重

第二个场景:就是你的机器运行的JVM在执行频繁的Full GC, Full GC 是非常耗费CPU资源的, 它是一个非常负载的过程,所以一旦你的JVM有频繁的Full GC,

      带来的一个明显感觉,一个是系统可能会时不时的卡死, 因此Full GC 会带来一定的"Stop the world" 问题, 一个是机器的CPU负载过高.

      所以一旦知道CPU负载过高的两个原因,就容易排查了

首先看一下JVM Full GC 的频率 通过jstat,或者是监控平台, 很容易看到现在Full GC频率, 如果是Full GC频繁,那就是Full Gc引起的CPU负载过高

如果Full GC频率很正常, 那就肯定是你的系统创建了过多线程在并发执行负载很重的任务了

原文地址:https://www.cnblogs.com/wgDream/p/12841923.html