线上排查问题的一般流程是怎么样的?
1. CPU占用过高排查流程
1. 利用 top 命令可以查出占 CPU 最高的的进程pid ,如果pid为 9876
2. 然后查看该进程下占用最高的线程id【top -Hp 9876】
3. 假设占用率最高的线程 ID 为 6900,将其转换为 16 进制形式 (因为 java native 线程以 16 进制形式输
出) 【printf '%x\n' 6900】
4. 利用 jstack 打印出 java 线程调用栈信息【jstack 9876 | grep '0x1af4' -A 50 --color】,这样就可以更好
定位问题
2. 内存占用过高排查流程
1. 查找进程id: 【top -d 2 -c】
2. 查看JVM堆内存分配情况:jmap -heap pid
3. 查看占用内存比较多的对象 jmap -histo pid | head -n 100
4. 查看占用内存比较多的存活对象 jmap -histo:live pid | head -n 100