JVM系列:三、性能监控及工具

本文介绍了JVM的各种监控工具,包括jps、jstat、jinfo、jmap、jhat、jstack,以及JVM的可视化工具Jconsole和VisualVM。通过这些工具,可以实时查看和分析JVM的内存、垃圾收集、线程状态等信息,对性能调优至关重要。此外,还提及了JVM的一些常用参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Sun JDK自带监控和故障处理工具

jps

显示Hotspot虚拟机继承

jstat

收集Hotspot虚拟机的运行数据

jinfo

显示虚拟机配置信息

jmap

生成虚拟机的内存转储快照(heapdump文件)

jhat

用于分析heapdump文件,建立HTTP server用于浏览器访问。

jstack

显示虚拟机的线程快照

JDK1.5中需要手动来设置“-Dcom.sun.management.jmxremote”开启JMX管理功能,部分工具是基于JMX的。在JDK1.6后该功能默认是开启的。


jps [options] [hostid]

jps,和Linuxps命令类似,查询的是虚拟机的进程。可以显示执行主类、LVMID(本地虚拟机唯一ID)等。LVMID和系统的PID是一致的。

如 >jps -l

6632 sun.tools.jps.Jps

6640 org.jetbrains.idea.maven.server.RemoteMavenServer

jps工具主要选项

-q

只输出LVMID,省略主类名称

-m

输出虚拟机进程启动时传递给main()函数的参数

-l

输出主类全名,如果是jar输出jar路径

-v

输出虚拟机进程启动时JVM参数


jstat [ option vmid [interval [s|ms] [count] ]  ]

jstat用于监视虚拟机各种运行状态信息。可以显示类装载、内存、垃圾收集、JIT编译等运行数据。

对于本地虚拟机,VMIDLVMID是一样的。如果是远程的则VMID变成远程的格式。

intervalcount表示查询间隔和次数

> jstat -gc 6632 250 20

250毫秒查询一次垃圾收集,共20

jstat工具主要选项

-class

监视类装载、卸载数量、总空间及类装载所耗费的时间

-gc

监视Java堆状况,Eden区、2survivor区、老年代、永久代等

-gccapacity

-gc类似,主要关注各区域最大最小空间

-gcutil

-gc类似,主要关注已使用空间的百分比

-gccause

-gcutil一样,会输出上一次gc的原因

-gcnew

监视新生代GC状况

-gcnewcapacity

-gcnew类似,主要关注最大最小空间

-gcold

监视老年代GC状况

-gcoldcapacity

同上

-gcpermcapacity

永久代的最大最小空间

-compiler

输出JIT编译器编译过的方法,耗时等信息

-printcompilation

输出已被JIT编译的方法


jinfo [ option ] pid

jinfo能实时查看和调整虚拟机的各项参数。

> jinfo -flag CMSInitiatingOccupancyFraction 6632


jmap [ option ] vmid

jmap用于生成转储快照(heapdump)、查询堆和永久代详细信息等。

jmap工具主要选项

-dump

生成heap文件。-dump:[live,]format-b,file=<filename> 其中live说明只dump出存活的对象

-finalizerinfo

显示F-Queue中等待Finalizer线程执行finalize方法的对象(Linux/Solaris有效)

-heap

显示堆详细信息(Linux/Solaris有效)

-histo

显示堆中对象统计信息,包括类、实例数量和合计容量

-permstat

显示永久代内存状态(Linux/Solaris有效)

-F

-dump没有响应时,可使用这个选项强制生成dump文件。(Linux/Solaris有效)

> jmap -dump:format=b,file=dumpfile.log 6632


jhat <heapdumpfile>

jhatjmap配合使用。来分析jmap生成的转储快照文件,内置了一个微型的HTTP服务器,供用户在浏览器来访问分析接口。

除了这个,还有VisualVMEclipse Memory AnalyzerIBM HeapAnalyzer等都能更专业的分析heap文件。


jstack [ option ] vmid

Java堆栈跟踪工具。用于生成虚拟机当前时刻的线程快照(threaddump文件)。

jstack工具主要选项

-F

正常输出请求不响应时,强制输出线程堆栈

-l

除堆栈外,显示关于锁的附加信息

-m

调用本地方法的话,可以显示C/C++堆栈


可视化工具

JDK默认提供了两个可视化工具:JconsoleVisualVMJconsoleJDK1.5提供的虚拟机监控工具,1.6后又推出了更强大的VisualVM。其中VisualVM除了能提供基本的监控功能外,最强大的是它的插件机制,基于它能扩展各种各样的插件用于监控调试。


附JVM常用参数

参数

说明

备注

-Xms

最小堆容量,新生代旧生代的初始化容量

默认物理内存1/64(新生代+旧生代)-Xms512m

-Xmx

最大堆容量,包括新生代和旧生代

默认物理内存1/4(新生代+旧生代)-Xmx1024m

-Xmn

新生代容量,包括EdenS1S0

新生代增大对导致旧生代减小,对系统会有较大影响。Sun推荐比例是新生代为整个堆的3/8

-XX:NewSize

新生代容量

For 1.3/1.4

-XX:MaxNewSize

新生代最大容量

For 1.3/1.4

-XX:PermSize

持久代的初始值

默认物理内存1/64(-XX:PermSize=256m)

-XX:MaxPermSize

持久代最大值

默认物理内存1/4()

-Xss

每个线程的堆栈大小

JDK5.0以后默认为1M

-XX:SurvivorRatio

堆中新生代对比例(EdenSurvivor的倍数,如值为5,即Eden5/7S1S0各占1/7

-XX:+DisableExplicitGC

关闭System.gc()

-XX:MaxTenuringThreshold

垃圾最大年龄

在新生代中,EdenS0S1之间存活的周期(复制的次数),默认15

-XX:PretenureSizeThreshold

对象大于这个值则直接分配到老年代(对SerialParNew有效)

-XX:+UseParallelGC

-XX:+UseParNewGC

新生代使用ParNew进行收集(并行)

可与CMS收集同时使用

JDK5.0以上会根据系统配置自行设置

-XX:ParallelGCThreads

并行收集的线程数

最好与处理器数相等

-XX:+UseParallelOldGC

旧生代使用Parallel进行收集(并行收集)

-XX:GCTimeRatio

垃圾回收时间占程序运行时间的百分比

1(1+n)

-XX:+UseConcMarkSweepGC

使用CMS收集

-XX:+PrintGC

每次GC时打印日志

-XX:+PrintGCDetails

打印详细日志

-XX:+PrintGCTimeStamps

打印时间戳

-XX:+PrintGC:PrintGCTimeStamps

-XX:+PrintGCApplicationStoppedTime

打印出垃圾回收期间程序暂停的时间

-Xloggc:filename

相关日志输出到文件


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值