• java系统线上故障排查总结


    线上故障主要会包括 CPU、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。

    同时例如 jstack、jmap 等工具也是不囿于一个方面的问题的,基本上出问题就是 df、free、top 三连,然后依次 jstack、jmap 伺候,具体问题具体分析即可。

    1,CPU 

    一般来讲我们首先会排查 CPU 方面的问题。CPU 异常往往还是比较好定位的。原因包括业务逻辑问题(死循环)、频繁 gc 以及上下文切换过多。而最常见的往往是业务逻辑(或者框架逻辑)导致的,可以使用 jstack 来分析对应的堆栈情况。

    使用 jstack 分析 CPU 问题
    我们先用 ps 命令找到对应进程的 pid(如果你有好几个目标进程,可以先用 top 看一下哪个占用比较高)。

    接着用top -H -p pid来找到 CPU 使用率比较高的一些线程

    其中-p表示查找指定进程的信息,-H表示线程模式。

    然后将占用最高的 pid 转换为 16 进制printf '%x ' pid得到 nid,

    printf  '%x ' pid

    或:

    printf 0x%x pid

     接着直接在 jstack 中找到相应的堆栈信息jstack pid |grep 'nid' -C5 –color

    jstack -l 11 |grep 0x255777

    可以看到我们已经找到了 nid 为 0x42 的堆栈信息,接着只要仔细分析一番即可。

    当然更常见的是我们对整个 jstack 文件进行分析,通常我们会比较关注 WAITING 和 TIMED_WAITING 的部分,BLOCKED 就不用说了。我们可以使用命令cat jstack.log | grep "java.lang.Thread.State" | sort -nr | uniq -c来对 jstack 的状态有一个整体的把握,如果 WAITING 之类的特别多,那么多半是有问题啦。

    命令总结:


    1,free -h
    2,ps -aux | sort -k4nr | head -n 10
    3,top -Hp pid
    4.记录首个pid,转化成16进制后的数字,可通过计算器(calc)或 printf %x 26461 675D
    5, 导出
    jstack -l pid > pid.log
    或使用jmap生成hprof文件
    ./jmap -dump:live,format=b,file=/u01/pid.hprof pid
    使用jprofiler分析原因

    jprofiler官网下载地址:

    https://www.ej-technologies.com/download/jprofiler/files

    更多:

    https://www.cnblogs.com/frankcui/p/14151132.html

    好记性不如烂笔头
  • 相关阅读:
    canvas阴影
    Anagrams
    Compare Strings
    php rtrim的一个坑,很“二”的问题
    LRU算法
    linux下重启php服务
    nginx -s reload "/alidata/server/nginx/logs/nginx.pid" failed
    【ACM】阶乘因式分解(二)
    Two Strings Are Anagrams
    找子串
  • 原文地址:https://www.cnblogs.com/codehello/p/13156544.html
Copyright © 2020-2023  润新知