linux排查cpu或内存占用过高
因为在线上也经常会碰到内存溢出导致的cpu或内存飙升问题,解决此类问题首先肯定是从linux方面入手
那么我也分享下linux排查这类问题的一些命令方法
1.top命令

红色部分是cpu占用率和内存使用率,可以发现cpu已经非常高了
2.top -H -p pid
查询cpu使用率高的一些线程

可以看到pid为905和1075的线程占用cpu比较高,先查下pid=905的
3. printf '%x\n' pid
将占用最高的 pid 转换为 16 进制

已经转成16进制389
4. jstack pid |grep 'nid' -C5
在 jstack 中找相应的堆栈信息,注意这里的pid是最上面的top命令下的进程pid,而nid=0x389,需要加上0x

报的栈信息错误里发现了TestApi.testJvm方法
然后在代码中找到了这块内存溢出的代码(测试代码)
@GetMapping("/testJvm")
@ApiOperation(value = "测试内存溢出",notes = "测试内存溢出")
public void testJvm() {
while (true) {
// 每次循环创建一个新的大对象
byte[] largeArray = new byte[1024 * 1024]; // 1MB
}
}
这里只是简单介绍了linux排查的一种思路,实际场景可能更为复杂,后续也会在这补充新的排查思路

浙公网安备 33010602011771号