jvm 内存,线程,gc分析

Posted z-test

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jvm 内存,线程,gc分析相关的知识,希望对你有一定的参考价值。

1.查看 gc的次数,和各个垃圾回收区域的内存比例  jstat 

jstat -gcutil pid interval(ms) 例子:jstat -gcutil 332 1000

 

参数说明如下:
S0: 新生代中Survivor space 0区已使用空间的百分比

S1: 新生代中Survivor space 1区已使用空间的百分比
E: 新生代已使用空间的百分比
O: 老年代已使用空间的百分比
P: 永久带已使用空间的百分比


YGC: 从应用程序启动到当前,发生Yang GC 的次数

YGCT: 从应用程序启动到当前,Yang GC所用的时间【单位秒】
FGC: 从应用程序启动到当前,发生Full GC的次数
FGCT: 从应用程序启动到当前,Full GC所用的时间
GCT: 从应用程序启动到当前,用于垃圾回收的总时间【单位秒】

技术分享图片

2.内存分析 jmap

 2.1 生成堆栈文件

  -dump堆到文件,format指定输出格式,live指明是活着的对象,file指定文件名

  jmap -dump:live,format=b,file=/data/dump.hprof 21275

 2.2 查看jvm 当前配置

   jmap -heap 21275

技术分享图片

 

 2.3 打印当前内存中对象的数量排序

       jmap -histo:live 21275 | more

技术分享图片


3.线程分析  jstack

  jstack [option] PID

-F : 当正常输出请求不被响应时,强制输出线程堆栈 
-l : 除堆栈外,显示关于锁的附加信息 
-m : 如果调用到本地方法的话,可以显示C/C++的堆栈

4.生成的服务器,一般按下面进行配置。

8G内存机器:

  • JAVA_OPTS="-Djava.awt.headless=true -server -Xms5000m -Xmx5000m -Xmn2500m -=256M -XX:MaxPermSize=512M -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=60 -XX:+UseParNewGC -verbose:gc -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintGCTimeStamps -Xloggc:/bankapp/tomcat/logs/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/bankapp/tomcat/logs/heapdump"

4G内存机器:

  • JAVA_OPTS="-Djava.awt.headless=true -server -Xms2500m -Xmx2500m -Xmn1000m -XX:PermSize=256M -XX:MaxPermSize=512M -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=60 -XX:+UseParNewGC -verbose:gc -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintGCTimeStamps -Xloggc:/bankapp/tomcat/logs/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/bankapp/tomcat/logs/heapdump" 

以上是关于jvm 内存,线程,gc分析的主要内容,如果未能解决你的问题,请参考以下文章

jvm调优-从eclipse开始

JVM:JVM 调优 - 从 Eclipse 开始

怎么查看GC 及jvm配置

45.JVM调优策略常见问题:内存泄漏(年老代堆空间被占满持久代被占满堆栈溢出线程堆栈满系统内存被占满)优化方法:优化目标优化GC步骤优化总结;案例分析(公司系统参数网上给的配置参数)

JVM——内存溢出

JVM内存区域划分及GC简述