面试经常会被问到java应用出现了问题,如何排查,主要使用下面几个命令基本都能解决
比如我们要查看cpu飙升的问题
我们再看看我运行的代码
public class test {
public static void start() {
ExecutorService pool = Executors.newFixedThreadPool();
while (true) {
pool.execute(() -> {
double a = Math.random();
double b = Math.random();
int result = (int) (a + b);
});
}
}
public static void main(String[] args) {
start();
}
}
我们直接使用我们开头的几个命令
第一步执行top,找到占用内存高的进程id
第二打印进程的所有线程 top -Hp 2467
第三把对应占用高的线程转成16进制 printf '%x\n' 2469
第四打印对应线程的堆栈情况 jstack 2467| grep 915
以上基本就可以找到对应代码的问题,上面举例比较简单,实际可能比较复杂,但是基本上这几个命令都可以解决
导致CPU飙升常见的原因如下