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排查的一种思路,实际场景可能更为复杂,后续也会在这补充新的排查思路

 

posted @ 2025-05-07 14:40  马革皮  阅读(475)  评论(0)    收藏  举报