1. 程式人生 > >jvm 內存,線程,gc分析

jvm 內存,線程,gc分析

print 分享圖片 package 服務 serve 文件 time col pac

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分析