Java 调试与监控
启动参数
Java 的启动参数有运行时参数 和 JVM 参数,运行时参数就是 main 方法中的 args,而 JVM 参数是我们最常用的启动参数。
标准参数
标准参数(-):相对稳定的参数,每个版本的 JVM 都可用
非标 X 参数
非标 X 参数(-X):默认 JVM 实现参数的功能,但是不保证所有 JVM 都实现,不保证向后兼容
- -Xms(memory start):堆初始大小(默认为物理内存的 1/64)
- -Xmx(memory max):堆最大值(默认为物理内存的 1/4 或者 1G)
- -Xss(stack size):线程栈的大小(一般默认为 512k)
- -Xmn:年轻代的初始值及最大值(可用 -XX:NewSize 和 -XX:MaxNewSize 来分别设置)
- -Xmixed:默认为混合模式,开始解释执行,启动速度较快,对热点代码实行检测和编译。
- -Xint: 使用解释模式,启动很快,执行稍慢。
- -Xcomp: 使用纯编译模式,执行很快,启动很慢。
非标 XX 参数
非标 XX 参数(-XX):各个 JVM 实现会有所不同,将来可能会随时取消
- -XX:MaxDirectMemorySize ——最大非堆内存
调试
监控
常用监控工具
基础故障处理工具
- jps:虚拟机进程状况工具
- 列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一 ID。
- jstat(statistic):虚拟机统计信息监视工具
- 监视虚拟机各种运行状态信息,显示本地/远程虚拟机进程中的类加载、内存、gc 垃圾收集等运行时数据。
- jinfo:Java 配置信息工具
- 实时查看和调整虚拟机各项参数。
- jmap:Java 内存映像工具
- 生成堆转储快照(dump 文件);查询 finalize 执行队列、Java 堆和方法区的详细信息。
- 频繁 GC 可以使用 jmap 进行问题定位
- jhat:虚拟机堆转储快照分析工具
- 与 jmap 搭配使用,分析 jmap 生成的堆转储快照。
- jstack:Java 堆栈跟踪工具
- 生成虚拟机当前时刻的线程快照,定位线程出现长时间停顿的原因,具体可以分析:
- 死锁,死循环,请求外部资源阻塞,线程 wait(), sleep() 等。
- 生成虚拟机当前时刻的线程快照,定位线程出现长时间停顿的原因,具体可以分析:
可视化故障处理工具
- JConsole:Java 监视与管理控制台
- VisualVM:多合一故障处理工具
- JMC:可持续在线的监控工具
- MAT:内存分析工具
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment