jstack和jmap工具

jstack、jmap使用方法

使用前提

要配置好jdk,两个工具都是在jdk的bin目录里面的,调用时如果配置好了环境变量,那么直接在命令提示符窗口里输入命令。如果没有则手动cd到biin目录下也可以调用。输入jstack命令结果如下:
在这里插入图片描述

jstack

jstack是jvm自带的跟踪堆栈信息的工具。
在64位机器上需要加参数 “-J-d64” windows下使用只能用jstack -l pid,这里存疑,我使用了windows64位+jdk1.8并没有上述两个问题出现,貌似1.8已经不用使用这两个命令了
主要功能有两个
1.对现有进程做本地或远程的线程dump文件(一种包含了线程具体信息的特殊格式的文件,可以理解为快照)
2.对core文件做线程dump(线程崩溃后使用)

用法如下:
1.先简单的写个测试代码
在这里插入图片描述
2.使用jps工具查看java线程的id(jps工具详细用法点这里
在这里插入图片描述
3.根据类名可知4640即为线程id,使用命令jstack 4640
图1
图2
4.看第一张图中红笔标注位置可知,main线程在第8行sleep了对应代码正确
这里线程的状态对应会有几种情况:
new 未启动,runnable运行中,blocked受阻塞(被某个锁阻塞),wating等待中(一般停留在wait(),park()等语句中),TIMED_WATING等待时间中(上面代码中就是这种情况)

jmap

打印所有对象的情况
使用-heap参数
在这里插入图片描述
输出各个分区的内存占用情况,包括gc的情况
使用-histo参数
在这里插入图片描述
输出各个对象的实例数和大小

区别

两个工具的区别在于jstack是用于调试线程间的关系,解决阻塞,锁等问题
而jmap用于输出对象,适用于解决对象内存溢出等问题
如果想要监控整体的class情况、gc情况,可以考虑使用jstat命令用法点这里

如果文章存在问题,欢迎交流2018-12-17

参考文献

java命令–jstack 工具

猜你喜欢

转载自blog.csdn.net/weixin_37974649/article/details/85047331
今日推荐