JVM问题定位(待完善)

常用的JVM命令

  1. jps: 查看正在运行的java进程
jsp -l 
jps -lv
  1. jstack: 查看线程堆栈使用情况
# 打印线程状态及堆栈使用情况
jstack -l pid

# 输出堆栈log文件到本地
jstack -l pid > stack.log

# 打印java Native栈信息
jstack -m pid
  1. jinfo:查看JVM配置参数;动态调JVM参数

  1. jmap:查看堆使用情况、堆内对象直方图、加载类、生成堆快照等
# 打印 JVM 堆概要信息,包括堆配置、新生代、老生代信息
jmap -heap pid

# 打印类的直方图,也就是各个类实例的个数和空间占用情况
jmap -histo pid

# jmap dump 所有对象在堆中的分布情况
jmap -dump:format=b,file=/Users/fengzheng/jvmlog/jamp_dump.hprof 95463

#加:live 参数 dump 存活对象在队中的分布情况
jmap -dump:live,format=b,file=/Users/fengzheng/jvmlog/jamp_dump.hprof 95463

# Java 类加载器(ClassLoader)信息,包括加载器名称、已加载类个数、占用空间、父加载器、是否存活、类型信息。
jmap -clstats pid
  1. jstat: 主要用来通过垃圾回收相关信息来判断 JVM 性能问题,也可以查看类加载、编译的情况,主要的用法是通过持续的固定时间间隔的输出来观察。比如每 3 秒打印一次 GC 回收次数,连续打印 10 次,通过动态的变化来观察 GC 是否过于密集。
# 打印 5301 进程下的垃圾回收情况,-h 3 表示每 3 行输出一次标题信息,3s 5 表示每 3s 输出一次,一共输出 5 次

jstat -gcutil -h 3 5301 3s 5

实战JVM问题定位

(1)查询正在运行的java进程列表

jps -l -m

(2)查询进程中CPU使用率较高的线程

top -H -p pid

(3)将线程ID转换为16进制

printf "%x\n" ThreadId

(4)使用Jstack查询线程的堆栈情况

jstack -l PID | grep ThreadId

具体案例

(1)jps -m -l
(2)top -Hp 1754
(3)printf "%x\n" 1773
(4)jstack -l 1754 | grep 6ed -A 20

JVM问题定位步骤

查看堆栈信息 执行步骤:
1. jps
查出程序进程pid

2.top -p <pid> (比如pid:123556)
显示进程的内存情况

3.按H(大写H),获取每个线程的内存情况 

4.找到内存和cpu占用最高的线程tid

5.转为十六进制得到 0x4cd0,此为线程id的十六进制表示

6.执行 jstack 123556|grep -A 10 4cd0(步骤5中的0x4cd0,去掉ox),得到线程堆栈信息中 4cd0 从堆栈中看一下那个代码出问题了。

Dump分析

  • jvm dump分析的基本思路:

    • (1)内存分析;
    • (2)线程分析
    • (3)gc log分析
  • 线程dump分析的基本思路:

    • step1:jps查询java 进程id
    • step2:使用jstack dump 线程文件,jstack -l processId > thread_dump.txt
    • step3:将step2中的dump文件上传至线程分析工具,如:fastThread, Samurai, IBM Thread & Monitor analyzer, Visual VM 等
  • 内存dump分析的基本思路:

    • step1:jps查询java 进程id
    • step2: 使用jmap dump出当前的内存dump文件,jmap -dump:format=b,file=heap.bin
    • step3: 将step2中的dump文件上传到dump分析工具(如: Eclipse MAT, HeapHero, JVisualVM)进行分析,
  • gc log dump分析

    • step1:进程启动时候传递参数
      java version8: -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:<file-path>
      java version9: -Xlog:gc*:file=<file-path>
    • step2: 将gc log文件上传至分析工具,如:GCeasy, IBM GC & Memory visualizer, HP JMeter, Google Garbage Cat

基于Arthas的分析(待补充)

Reference

[1] https://dzone.com/articles/what-is-garbage-collection-log-thread-dump-heap-du
[2] jvm参数说明:http://www.51gjie.com/java/551.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值