JVM相关

jstat

jstat -gcutil
jstat -gcutil 28589 10000 30 #各分区情况,注意YGCT是否较大
jstat -gc 28589 1s 1 查看MU,可见永久带(变量)占用多大内存

Refer to

http://blog.csdn.net/zhaozheng7758/article/details/8623549

Javap 字节码查看

javap -c xxx.class

dump

jmap -dump:format=b,file=dumpFileName.hprof PID
jmap -dump:live,format=b,file=dumpFileName.hprof PID
通过MAT工具进行分析

jps

jps #查看服务进程号

jmap

jmap -histo:live 8697|head -n 23
jmap -histo:live 28589 >> /var/tmp/jmap17.txt #java对象分析
jmap -heap 18181 > heap$(date +%y%m%d%k%M%S).txt,保存heap(堆)信息

性能参考

Minor GC执行时间(小于50ms)
Minor GC执行不频繁(大概10秒一次)
Full GC执行时间(小于1s)
Full GC执行不频繁(10分钟一次)

目标

  • GC的时间足够的小
  • GC的次数足够的少
  • 发生Full GC的周期足够的长

JVM调优的原则

  • 多数的Java应用不需要在服务器上进行GC优化;
  • 多数导致GC问题的Java应用,都不是因为我们参数设置错误,而是代码问题;
  • 在应用上线之前,先考虑将机器的JVM参数设置到最优(最适合);
  • 减少创建对象的数量;
  • 减少使用全局变量和大对象;
  • GC优化是到最后不得已才采用的手段;
  • 在实际使用中,分析GC情况优化代码比优化GC参数要多得多;

收集器

  • Serial收集器(单线程,基本不用)
  • ParNew收集器(多与CMS配合使用)
  • CMS(Concurrent Mark Sweep)收集器
  • G1(Garbage First)收集器

CMS参数

-XX:+UseConcMarkSweepGC
-XX:UseParNewGC
-XX:CMSInitiatingOccupancyFraction
-XX:+UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction
-XX:+CMSClassUnloadingEnabled
-Xms
-Xmx
-Xmn
-Xss
-XX:MetaspaceSize
-XX:MaxMetaspaceSize

G1参数

-XX:G1HeapRegionSiz
-XX:MaxGCPauseMillis
-XX:G1NewSizePercent
-XX:G1MaxNewSizePercent
-XX:ParallelGCThreads
-XX:ConcGCThreads
-XX:+UseG1GC

LOG参数

-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCApplicationStoppedTime
-Xloggc:<filename>

原文地址:https://www.cnblogs.com/liehen2046/p/12176675.html