《菜鸟读并发》多线程程序问题如何调试?

  1. jstat
  2. jstack
  3. jmap
  4. netstat(非jvm命令)
  1. jstat 查看Jvm的堆栈信息

    能够查看eden,survivor,old,perm等heap的capacity,utility信息,对于查看系统是不是有能存泄漏以及参数设置是否合理有不错的意义

  2. jstack 查看jvm当前的thread dump的

    可以看到当前Jvm里面的线程状况,这个对于查找blocked线程比较有意义

  3. jmap .

    查看jvm当前的heap dump的,可以看出当前jvm中各种对象的数量,所占空间等等。

    尤其值得一提的是这个命令可以到处一份binary heap dump的bin文件,这个文件能够直接用

    Eclipse Memory Anayliser来分析,并找出潜在的内存泄漏的地方。

  4. 还有一个比较有用的非jvm命令–netstat

    通过这个命令可以看到linux系统当前在各个端口的链接状态,比如查看数据库连接数等等

jstat

jstat分析的内容(指标)

新生代对象增长的速率
Young GC的触发频率
Young GC的耗时
老年代对象增长的速率 Full
GC的触发频率
Full GC的耗时
每次Young GC后有多少对象是存活下来的
每次Young GC过后有多少对象进入了老年代

目的

  1. 通过这些指标,我们可以轻松的分析当前系统的运行情况
  2. 判断当前系统的内存使用压力以及GC压力
  3. 还有就是内存分配是否合理,为可能要做的优化做准备

常用的jstat命令

jps:找出你们的Java进程的PID
jstat -gc pid:查看Java进程(JVM)的内存和GC情况

可以显示gc的信息,查看gc的次数,及时间等。

运行这个命令之后会看到如下列:

  1. SOC:这是From Survivor区的大小.

  2. S1C:这是To Survivor区的大小

  3. SOU:这是From Survivor区当前使用的内存大小

  4. S1U:这是To Survivor区当前使用的内存大小

  5. EC:这是Eden区的大小

  6. EU:这是Eden区当前使用的内存大小

  7. OC:这是老年代的大小

  8. OU:这是老年代当前使用的内存大小

  9. MC:这是方法区(永久代、元数据区)的大小

  10. MU:这是方法区(永久代、元数据区)的当前使用的内存大小

  11. YGC:这是系统运行迄今为止的Young GC次数

  12. YGCT:这是Young GC的耗时

  13. FGC:这是系统运行迄今为止的Full GC次数

  14. FGCT:这是Full GC的耗时

  15. GCT:这是所有GC的总耗时

其中最重要的是最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间

jstat -gccapacity pid:堆内存分析

可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,

如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推,
OC是old内纯的占用量。

jstat -gcnewcapacity pid:年轻代对象的信息及其占用量
stat -gcoldcapacity pid:old代对象的信息及其占用量
jstat -gcpermcapacity pid:perm对象的信息及其占用量
jstat -gcnew pid:年轻代对象的信息
jstat -gcold pid:old代对象的信息
jstat -gcutil pid: 统计gc信息统计
jstat -class pid:显示加载class的数量,及所占空间等信息
jstat -compiler pid:显示VM实时编译的数量等信息
stat -printcompilation pid: 当前VM执行的信息

一些术语的中文解释:

  1. SOC:这是From Survivor区的大小.

  2. S1C:这是To Survivor区的大小

  3. SOU:这是From Survivor区当前使用的内存大小

  4. S1U:这是To Survivor区当前使用的内存大小

  5. EC:这是Eden区的大小

  6. EU:这是Eden区当前使用的内存大小

  7. OC:这是老年代的大小

  8. OU:这是老年代当前使用的内存大小

  9. MC:这是方法区(永久代、元数据区)的大小

  10. MU:这是方法区(永久代、元数据区)的当前使用的内存大小

  11. YGC:这是系统运行迄今为止的Young GC次数

  12. YGCT:这是Young GC的耗时

  13. FGC:这是系统运行迄今为止的Full GC次数

  14. FGCT:这是Full GC的耗时

  15. GCT:这是所有GC的总耗时

  16. NGCMN:年轻代(young)中初始化(最小)的大小 (字节)

  17. NGCMX:年轻代(young)的最大容量 (字节)

  18. NGC:年轻代(young)中当前的容量 (字节)

  19. OGCMN:old代中初始化(最小)的大小 (字节)

  20. OGCMX:old代的最大容量 (字节)

  21. OGC:old代当前新生成的容量 (字节)

  22. PGCMN:perm代中初始化(最小)的大小 (字节)

  23. PGCMX:perm代的最大容量 (字节)

  24. PGC:perm代当前新生成的容量 (字节)

  25. S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比

  26. S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值