美文网首页
JAVA线上常见问题排查

JAVA线上常见问题排查

作者: 运气爆棚lsw | 来源:发表于2022-01-21 17:22 被阅读0次

    1.线上CPU飙高排查思路

    一般常见的原因主要是:
    ①死循环(while / 递归 / for循环相关等 )

    ②锁相关引发( CAS自旋锁过多 / 线程死锁 / 数据库死锁引发程序 )

    ③线程阻塞 / 网络IO (远程调用阻塞线程不能释放 / 持续任务超时等待 )
    /或者数据库连接并发数资源耗尽

    ④JAVA程序频繁FULL GC(大量对象被引用,无法及时进行垃圾回收等)
    / 未合理分配新生代和老年代的比例导致
    / 或者服务器CPU/内存等资源无法支撑线上程序运行
    / 频繁创建超大类型对象或者上传文件过大过多导致内存耗尽

    1.先使用TOP命令查看占用CPU比较高的进程,执行top命令,查看所有进程占系统CPU的排序
    2.然后用 top -H -p pid 来找到cpu使用率比较高的线程
    3.控制台执行 printf '0x%x' tid 线程 id 二进制转化 成16 进制
    4.使用 jstack pid | grep tid 找到线程堆栈 (tid为步骤3得到的结果)

    2.阿里巴巴开源诊断工具 arthas

    # 执行以下命令,下载arthas运行jar包
    
    curl -O https://arthas.aliyun.com/arthas-boot.jar
    java -jar arthas-boot.jar 
    
    # 如果Linux未配置Java环境变量 可以使用使用 whereis java查找bin路径,指定路径执行
    # 例如: /usr/bin/java -jar arthas-boot.jar
    
    启动成功如图:

    3.使用开源工具 show-busy-java-threads (需要下载)

    # 主要功能:
    show-busy-java-threads
    1.从所有运行的Java进程中找出(5个缺省)最消耗CPU的线程,打印线程栈信息
    2.缺省会自动从所有的Java进程中找出最消耗CPU的线程,这样用更方便
    3.手动指定分析的Java进程Id,以保证只会显示单个Java进程的信息
    show-busy-java-threads -p <指定的Java进程Id>
    show-busy-java-threads -c <要显示的线程栈数>
    

    具体使用参考一下执行语句,逐条执行即可

    命令获取:
    wget --no-check-certificate https://raw.github.com/oldratlee/useful-scripts/release-2.x/bin/show-busy-java-threads
    下载完毕之后赋予执行权限
    chmod +x show-busy-java-threads
    开始执行
    ./show-busy-java-threads
    
    执行下载

    运行结果如图:

    相关文章

      网友评论

          本文标题:JAVA线上常见问题排查

          本文链接:https://www.haomeiwen.com/subject/togehrtx.html