JAVA使用过程中的一些笔记:JVM、GC等

一、基础知识

谈到JAVA的JVM 不得不说的几个点:
堆内存: 新生代、老生代 、永久代;
GC内存回收: Young GC 、Full GC(Old GC)
OOM: 内存溢出 OutOfMemory

二、基础工具命令

1、查看实时GC运行情况:

jstat -gcutil  <pid> 2000 20  

(2秒一次采集,输出20次)输出:
S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

2、打印当前进程的线程信息:

jstack -l <pid> >jvm_listlocks.txt  

#将线程输出到这个文件中,
然后下载到本地通过:jca456.jar 来进行分析,具体怎么看,百度吧! 看多了就懂了;

3、打印JVM堆内存,也就是常说的打dump :

jmap  -dump:file=jvm_en.hprof  <pid>  

#执行完就会有jvm_en.hprof 这个文件生产,不要轻易操作生产,容易挂应用的。或者通过kill -3 来生成这个文件。
生成的dump如果不大,可以使用使用ha456.jar工具打开分析。java -jar -Xmx3000m ha456.jar
要是比较大,使用mat内存分析,可以在服务器上跑(jmap.info为dump文件):

./ParseHeapDump.sh jmap.info  org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components

然后生产3个zip包。 下载下来解压用浏览器打开就可以看了。

4、手工触发Full GC
这个用于在打dump前或者发现没有自动触发FullGC的时候,可手工来下试试能不能回收内存。
使用JMAP命令手工触发fullGC:

jmap -histo:live <pid>

或者

jmap -dump:live,file=dump.bin <PID> 

然后删掉dump.bin文件

你可能感兴趣的:(JAVA,jvm,java,jar,jdk)