共计 1859 个字符,预计需要花费 5 分钟才能阅读完成。
摘要:一问一答的模式轻松学习把握 java 工具。
以一问一答的模式学习 java 工具
Q:查看内存泄露的工具有?
A:jmap 生成 dump 转储文件,jhat 可视化查看。
Q:某过程 CPU 使用率始终占满,用什么工具能够排查?
A:
top -Hp pid 找到最占 CPU 的线程
而后 jstack 来查找那个线程此时所处的堆栈,确定问题产生地位。
§ 各工具具体介绍
§ jstack
全称:JVM Stack Trance
作用:查看某个 java 过程的堆栈状况,可用于确认死锁、IO 期待、死循环等问题。
命令用法:
- jstack pid
- 查看死锁例子如下图,找到 wait 的 lock 和已被锁的 lock
- 查看期待 IO 例子:
§ jstat
全称:
作用:
查看过程中内存应用状况,但只能给出一些简略统计数据
- 统计加载了多少类以及占用空间 jstat -class pid
- 统计编译了多少文件 jstat -compiler 10
Q:jstat -gcutil {pid} 2000 能够每隔 2 秒,对 pid 过程打印内存应用统计信息。
gcutil 的输入如下
外面哪个百分比如果长期处于 99%-100% 会有 OMM 危险?(OutOfMemoryError)
A:
如果 E 和 O 即新生代、老年代内存区始终都处于满的状态,则很有可能会引发 OMM 危险。就像上面这个。
§ jmap
全称:JVM Memory Map
作用:生成过程的内存堆快照
当须要看一下过程里是什么货色占用了过多内存时,能够用 jmap 打印一下堆快照。
命令用法:
- 打印堆快照:jmap -dump:file=./dumpfile.dump 过程 pid
- 查看特定类所占用的状况:jmap -histo:live 过程 pid | grep 类名
Q:用 jmap 查看内存透露实例
我分了 3 次,每个 1h 调用 jmap 查看过程的内存实例,查看该时刻各对象数量
第一次查看状况如下:
第二次隔了 2 各小时,查看状况如下:
请问哪个对象可能有内存透露危险?
A:
ObjectA 可能有泄露,因为他的对象数量减少最快,阐明对象始终在减少且很多无奈进行 gc 开释。
§ jhat
全称:JVM Heap Analysis Tool
和 jmap 配合,能够解析 jmap 生成的堆快照,反对生成 1 个 web 过程供咱们剖析和查看。
命令用法:
- jhat -J-Xmx515M dumpfile.dump
此时就会启动 1 个 webServer,而后咱们去拜访就行了
§ jdb
全称:Java Debugger
作用:用来对 core 文件和正在运行的 Java 过程进行实时地调试,相似于 c ++ 里的 gdb
常见用法:
- 启动过程并调试: jdb -classpath . Test
- 至二级调试某过程: jdb -attach 8000 -sourcepath /Users/wefit/Development/study/java/jtest/src/
§ jcmd
作用:多功能的工具,能够用它来导出堆、查看 Java 过程、导出线程信息、执行 GC、还能够进行采样剖析,能够了解为 1 个性能调优时用的工具。
常见命令:
- 查看 以后机器上所有的 jvm 过程信息: jcmd -l
- 查看指定过程的性能统计信息: jcmd pid PerfCounter.print
- 列出以后运行的 java 过程能够执行的操作: jcmd PID help
- 查看线程堆栈信息: jcmd PID Thread.print
- 查看堆内存信息:jcmd PID GC.heap_dump FILE_NAME
§ jps
简略记法:JVM process status
全名:Java Virtual Machine Process Status Tool
作用:显示 以后零碎用户 的 所有 Java 过程状况及其过程号
常用命令:
- 查看过程 jvm 参数:jps -v
- 输入程序 main class 的残缺 package 名或程序的 jar 文件残缺路径名:jps -l
- 输入传递给 main 办法的参数: jps -m
§ jinfo
jvm infomation
作用:和 jps 性能相似,然而反对依据指定 pis 查看指定过程
- 能够查看 JVM 参数、零碎参数、调整 jvm 参数
- 但不反对查看 java 程序的内存应用状况
§ javap
把 java 字节码文件反汇编为 Java 源码文件。
§ javac
java 编译工具
javac 的执行过程:
§ JDK 可视化工具
§ jconsole
可监控 jvm,即可监控本地 jvm 也可监控近程 jvm,管理应用程序,能够查看死锁等诸多问题。
§ jvisualvm
Q:
- jvisualvm 能够监控近程服务器的运行状态
- 能够在 java 程序运行起来后再运行,通过某些协定连贯到 java 过程中。
- 运行时,能够不须要配置配置环境、虚拟机参数等。
点击关注,第一工夫理解华为云陈腐技术~