获取JVM设置默认值
|
|
jps(JVM Process Status Tool)-显示指定系统内所有HotSpot虚拟机进程
|
|
jstat(JVM statics Monitoring)
用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
1.监视类装载、卸载数量、总空间以及耗费的时间
|
|
2.输出JIT编译过的方法数量耗时等
|
|
3.垃圾收集统计概述,附加最近两次垃圾收集事件的原因
|
|
4.每隔2000ms输出4055进程的gc情况,一共输出1次
|
|
5.输出该进程的Java堆各区域使用的最大、最小空间
|
|
6.已使用空间占总空间的百分比
|
|
jmap(JVM Memory Map)
该命令用于生成heapdump文件,如果不使用这个命令,还可以使用-XX:+HeapDumpOnOutOfMemoryError
参数让虚拟机出现OOM的时候自动生成dump文件。
jmap不仅能生成dump文件,还可以查询finalize执行队列、Java堆和永久代的详细信息,如当前使用率、当前使用的是哪种收集器等。
1.打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况,可以用来判断内存的使用情况以及垃圾回收算法。
|
|
2.Dump到文件,format指定输出格式,live指明是活着的对象,file指定文件名
|
|
3.打印等待回收对象的信息
|
|
4.打印堆的对象统计,包括对象数,内存大小等。
|
|
jstack
jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法的堆栈的集合,生成线程快照的目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。
除堆栈外,显示关于锁的附加信息
|
|
常见问题的定位:
频繁GC问题或内存溢出问题
- 使用jps查看线程ID
- 使用
jstat -gc 3331 2000 20
查看gc情况,一般比较关注PERM区的情况,查看GC的增长情况。 - 使用
jstat -gccause
额外输出上次GC原因 - 使用
jmap -dump:format=b,file=heapDump 3331
生成堆转储文件 - 使用jhat或者可视化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)分析堆情况。
- 结合代码解决内存溢出或泄露问题。