概述
jstack
——发现线程正停留在哪行代码,定位到线程堆栈--进而到具体代码,性能调优中使用得非常多,尤其运行的java程序呈现hung时,可观察到jvm中当前所有线程的运行情况和线程当前状态。通过top
-Hp 进程Id 来获得当前进程中线程状态和线程Id.然后转换成16进制printf
"%xn"
jstack jstack -F # 有时候线程挂起的时候要加上-F参数才能把信息dump处理
配合使用ps、top、printf。 jstack 进程ID
> jstack.log,然后搜索BLOCKED,定位到引起死锁的地方
jmap
——提取进程内存信息,分析OOM原因
jmap -histo:live 20849 | sort -nrk 2 |
more 查看堆内存中的对象数目、大小统计
jmap -histo:live 6406 | grep yourname | wc -l
搜某对象堆内存中对象数目、大小统计
jmap
-dump:format=b,file=HeapDump_youname.bin
#输出堆信息jmap -heap
使用jmap转换core.pid文件时,当文件格式比较大时(>2G)就不能执行成功(转换3G文件时没成功)而报出Error
attaching to core file: Can't attach to the core file
查过sun的bug库中,这bug还没修复,可能由于32位下用户进程寻址大小限制在2G的范围内引起的,在64位系统和64位jdk版本中,转换3G文件应该没有什么大的问题(如运行在64位JVM上,可能需要指定-J-d64)。
jhat
简单分析内存中对象情况,与jmap搭配使用
#读取dump文件,生成报告并启动WEB服务器,默认端口为7000
jhat -J-mx768m -port 8999youport -stack false
./HeapDump_sjw.log
#
访问报告,需要打开浏览器访问其8999youport端口
jstat
jstat -gcutil pid 2000 10 # 每2秒输出一次内存情况,连续输出10次
最后
以上就是忧虑电源为你收集整理的java堆内存jstat_java运行负载观测jstack、jmap、jstat的全部内容,希望文章能够帮你解决java堆内存jstat_java运行负载观测jstack、jmap、jstat所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复