思路
案例步骤
cpu占用过高代码
先用一段程序创建几个线程,将其中一个线程设置成高 CPU 使用率的。
public class Main {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
Thread thread = new Thread(() -> {
System.out.println(Thread.currentThread().getName());
try {
Thread.sleep(30 * 60 * 1000);
}catch (Exception e){
e.printStackTrace();
}
});
thread.setName("thread-" + i);
thread.start();
}
Thread highCpuThread = new Thread(() -> {
long i = 0;
while (true) {
i++;
}
});
highCpuThread.setName("HighCpu");
highCpuThread.start();
}
}
上传到服务器执行
先用top命令找出CPU占比最高的
ps -ef或者jps进一步定位,得知是一个怎么样的一个后台程序惹事
ps -ef | grep java | grep -v grep
或者
jps -l
定位到具体线程或者代码
ps -mp 进程 -o THREAD,tid,time
参数解释
-m 显示所有的线程
-p pid进程使用cpu的时间
-o 改参数后是用户自定义格式
将需要的线程ID转换为16进制格式(英文小写格式)
jstack 进程ID | grep(16进程线程ID英文小写)-A60
输出一堆,但是只需要找到您公司的代码