当前位置: 代码网 > it编程>编程语言>Java > Java线上问题排查过程

Java线上问题排查过程

2026年03月06日 Java 我要评论
一、cpu使用率高模拟代码public class online { public static void main(string[] args) { while (true) {

一、cpu使用率高

模拟代码

public class online {

    public static void main(string[] args) {
        while (true) {
            // run
        }
    }
}

1)找到进程id

方法一:top命令列出进程信息,按p(shift+p)让cpu占用率由高到低排序(按m是内存),由此看到最高的是java进程,pid为31416。

方法二:jps命令,看到启动类online对应的pid为31416。

方法三:ps -ef | grep java,自己玩哈。

2)找到cpu占用率最高的线程(轻量级进程)id

top -hp pid命令列出指定进程里线程信息,同样按p排序,看到最高的线程id为31420。

3)查看线程的堆栈信息

首先将十进制31420转为十六进制,使用命令printf '%x\n' xxx。然后用jstack命令配合grep命令输出线程的堆栈信息。

jstack 进程id | grep '0x线程id' -a 10

由此可以看到线程的状态和执行代码位置。

二、内存占用高

模拟代码

public class online {

    private static final list<byte[]> byteslist = new arraylist<>();

    public static void main(string[] args) {
        for (int i = 0; i <= 10; i++) {
            byte[] bytes = new byte[1024 * 1024];
            byteslist.add(bytes);
        }
        locksupport.parknanos(timeunit.hours.tonanos(1));
    }
}

top命令列出进程信息,按m(shift+m)让内存占用率由高到低排序(按p是cpu),由此看到最高的是java进程,pid为13915。

1)将堆内存信息dump下来(生产环境需要谨慎)

jmap -dump:live,format=b,file=heap.bin 13915

jmap [options] pid

-dump:dump_options pid

connects to a running process and dumps the java heap. the dump_options include:

live --- when specified, dumps only the live objects; if not specified, then dumps all objects in the heap.

format=b --- dumps the java heap in hprof binary format

file=filename --- dumps the heap to filename

example: jmap -dump:live,format=b,file=heap.bin pid

2)分析堆快照信息

打开可视化工具jvisualvm(目录:java_home/bin/),文件->装入,选择刚才dump的文件

打开之后,选择“类”,按“大小”降序,就可以看到各类的实例数量和内存占用大小的信息了

双击类所在行(比如上面的java.lang.byte[]),选择实例,可以看到详细引用信息了

三、内存溢出

让jvm在发生内存溢出时自动dump堆快照文件

参数设置:

  • -xx:+heapdumponoutofmemoryerror:内存溢出时,保存堆快照文件
  • -xx:heapdumppath=/home/zhh/:堆快照文件保存路径

还是采用上面的代码,启动参数设置如下

-xms10m
-xmx10m
-xx:+heapdumponoutofmemoryerror
-xx:heapdumppath=/home/zhh/

发生oom时,在指定位置dump了堆快照文件,这时就可以拿去分析了(参考2)。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com