如何定位JVM的问题
来源:互联网 发布:软件运营方案书 编辑:程序博客网 时间:2024/06/05 03:08
1.top oder by with P:1040 // 首先按进程负载排序找到 axLoad(pid)
2.top -Hp 进程PID:1073 // 找到相关负载 线程PID
3.printf “0x%x\n”线程PID: 0×431 // 将线程PID转换为 16进制,为后面查找 jstack 日志做准备
4.jstack 进程PID | vim +/十六进制线程PID – // 例如:jstack 1040|vim +/0×431 -
可以看到CPU消耗在某个类的上耗时最长
但是对于线上问题定位来说,分秒必争,上面的 3步还是太繁琐耗时了,有没有可能封装成为一个工具,在有问题的时候一键定位,秒级找到有问题的代码行呢?
当然可以!工具链的成熟与否不仅体现了一个开发者的运维能力,也体现了开发者的效率意识。淘宝的oldratlee 同学就将上面的流程封装为了一个工具:show-busy-java-threads.sh(点击可直接下载,或参考文末链接下载),可以很方便的定位线上的这类问题,
4. jmap用来查看堆内存使用状况,一般结合jhat使用。
jmap -permstat pid
打印进程的类加载器和类加载器加载的持久代对象信息,输出:类加载器名称、对象是否存活(不可靠)、对象地址、父类加载器、已加载的类大小等信息,如下图:
5.还有一个很常用的情况是:用jmap把进程内存使用情况dump到文件中,再用jhat分析查看。jmap进行dump命令格式如下:
jmap -dump:format=b,file=dumpFileName
dump出来的文件可以用MAT、VisualVM等工具查看,这里用jhat查看:
jhat -port 9998 /tmp/dump.dat
6.jstat(JVM统计监测工具)
语法格式如下:jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]
vmid是虚拟机ID,在Linux/Unix系统上一般就是进程ID。interval是采样时间间隔。count是采样数目。比如下面输出的是GC信息,采样时间间隔为250ms,采样数为4:
jstat -gc 21711 250 4
S0C、S1C、S0U、S1U:Survivor 0/1区容量(Capacity)和使用量(Used)
EC、EU:Eden区容量和使用量
OC、OU:年老代容量和使用量
PC、PU:永久代容量和使用量
YGC、YGT:年轻代GC次数和GC耗时
FGC、FGCT:Full GC次数和Full GC耗时
GCT:GC总耗时
阅读全文
0 0
- 如何定位JVM的问题
- JVM问题定位工具
- JVM性能问题定位
- jvm 问题定位工具(转载自四月火的唠叨)
- 如何定位"无法重现“的问题
- 如何定位 问题SQL的【一般套路】
- 线上的项目如何快速定位问题
- 如何定位crach问题
- 测试如何定位问题
- 如何定位生产问题
- 如何定位问题
- 定位JVM内存溢出问题思路总结
- 巧用JVM启动参数定位一个问题
- 案例分享:如何通过JVM crash 的日志和core dump定位和分析Instrument引起的JVM crash
- 关于JVM介绍以及CPU占用过高的问题定位及解决实战经验
- 如何查看awr/statspack报表,来定位系统的问题
- 开元研究如何解决品牌定位的问题
- 如何定位和解决Andorid的内存溢出问题
- THINKPHP 提供数据表联合查询的简单方法
- 心情很愉快
- 04:错误探测
- Android USB转串口编程
- 求1+2+3+...+n,不能利用乘除法,以及for,while,if,else;
- 如何定位JVM的问题
- iOS UIView、UIImageView旋转产生边界锯齿的完美解决方法
- .net Math.Round方法详解
- Attempt to invoke virtual method 'void android.support.v7.app.ActionBar.hide()' on a null object re
- 分布式 微服务 JAVA语言开发
- Spring之AOP奇葩报错:Null return value from advice does not match primitive return type for
- MyBatis入门(一)
- Springmvc 拦截器的基本配置和使用
- 关于hover的一些问题