zoukankan      html  css  js  c++  java
  • java常用问题排查工具

    一:jstack找到最耗cpu的线程并定位代码

    1.ps -ef|grep java 或者 jps -l
    得到进程pid
    2.找到该进程内最耗cpu的线程,我一般使用:
    top -Hp pid
    3.cpu时间最长的就是pid为21742的线程,printf "x% " 21742,得到十六进制,为a
    4.使用jstack pid | grep a,打印进程的堆栈信息
     
    二:linux历史指标数据
    sar -A:报告所有的信息
    sar -u:cpu利用率
    sar 2 5:每隔2s显示5次,cpu的使用情况
     
    关于cpu消耗的问题,一般通过这两种方式都可以解决,复杂的话需要借助于perf。
     
    三:jstat和gc日志
    jstat -gc pid 1000:每1s钟打印堆间使用情况
    jstat -gcutil pid
    有些人习惯于查看gc log:

    -XX:+PrintGC 输出GC日志

    -XX:+PrintGCDetails 输出GC的详细日志

    -XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)

    -XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)

    -XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息

    -Xloggc:../logs/gc.log 日志文件的输出路径

    我一般做如下的设置

     
    -XX:+PrintGCDetails -Xloggc:../logs/gc.log -XX:+PrintGCTimeStamps  
     
    四:jmap的使用
    jmap -dump:format=b,file=a.bin pid : 当需要dump内存查看的时候,内存dump出来以后,
    使用eclipse memory analyzer
    jmap -histo:live pid : 在需要强制执行fgc的时候
    有些人喜欢使用gcore,不过有些jdk版本支持的并不是很好。
     
    五:btrace工具的使用,没有具体研究,后面贴上来
     
  • 相关阅读:
    [bzoj1251]序列终结者
    Codeforces #Round 406(Div.2)
    [3.23校内训练赛]
    [APIO2009]
    [APIO2016]
    [bzoj1901]动态区间k大
    [9018/1904]火星商店
    [bzoj3673/3674可持久化并查集加强版]
    [bzoj1297][SCOI2009]迷路
    [bzoj1218][HNOI2003]激光炸弹
  • 原文地址:https://www.cnblogs.com/felixzh/p/9001062.html
Copyright © 2011-2022 走看看