深入JVM内核—原理、诊断与优化 笔记20170708

常用JVM 配置参数

Trace跟踪参数

-verbose:gc
-verbose:class #跟踪类的加载和卸载,亦可单独配置-XX:+TraceClassLoading跟踪类的加载或单独配置-XX:+TraceClassUnloading
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps #每次GC时会打印程序启动后至GC发生的时间戳。
-Xloggc:log/gc.log
-XX:+TraceClassLoading
-XX:+PrintClassHistogram  #打印出实例的数量以及空间大小
-XX:+PrintHeapAtGC #每次GC时会分别打印回收前与回收后堆信息
-XX:+PrintGCApplicationConcurrentTime #打印每次GC时程序运行的时间,当GC后时间置为0.
-XX:+PrintGCApplicationStoppedTime #每次GC使程序停顿的时间
-XX:+PrintReferenceGC #用来跟踪系统内的(softReference)软引用,(weadReference)弱引用,(phantomReference)虚引用,显示引用过程。弱引用,软引用及虚引用对GC的影响
-XX:+PrintVMOptions #打印出JVM接受到的显式(主动配置的)命令行参数
-XX:+PrintCommandLineFlags #打印出显式(主动配置)和隐式(JVM自行设置)
-XX:+PrintFlagsFinal #打印出所有的系统参数值

堆的分配参数

-Xmx20m -Xms5m
-Xmn #设置新生代大小
-XX:NewRatio=1 #新生(eden+2*s)代和老年代(不包含永久代)的比值
-XX:SurvivorRatio=2 #设置两个Survivor区和eden的比值
-XX:+HeapDumpOnOutOfMemoryError
-XX:+HeapDumpPath=d:/a.dump
-XX:OnOutOfMemoryError=D:/printstack.bat %p #在oom时,执行一个脚本
#推荐新生代占堆的3/8,幸存代占新生代的1/10
-XX:PermSize -XXMaxPermSize

栈的分配参数

-Xss 栈的大小

垃圾回收算法

  • 引用计数法
  • 标记-清除
  • 标记-压缩
  • 复制算法

GC参数

-XX:+UseSerialGC

新生代、老年代使用串行回收
新生代复制算法,老年代标记-压缩

-XX:+UseParNewGC
-XX:ParallelGCThreads  #限制线程数量

新生代并行
老年代串行
复制算法

-XX:+UseParallelGC #使用Parallel收集器+老年代串行
-XX:UseParallelOldGC #使用Parallel收集器+老年代并行

新生代复制算法
老年代 标记-压缩

并行收集器

-XX:MaxGCPauseMills
-XX:GCTimeRatio

CMS收集器

-XX:UseConcMarkSweepGC 老年代并发标记清除
-XX:CMSInitiatingOccupancyFraction 设置触发GC的阈值
-XX:+UseCMSCompactAtFullCollection 
-XX:+CMSFullGCsBeforeCompaction
-XX:ParallelCMSThreads
-XX:+CMSClassUnloadingEnabled 运行对类元数据进行回收
-XX:CMSInitiatingPermOccupancyFraction
-XX:UseCMSInitiatingOccupancyOnly

系统性能监控

linux命令:

uptime
top
vmstat
pidstat #sudo apt-get install sysstat
pidstat -t #显示线程

windows工具
perform #windows自带
Process Explorer
命令行工具:

pslist

java 自带工具

jps -q -m -l -v
jinfo -flag  可以修改部分参数
jmap -histo 2972 > c:\s.txt
jmap -dump:format=b,file=c:\heap.hprof 2971
jstack -l -m -F
  • 图形化工具
    JConsole
    Visual VM
posted @ 2020-02-28 21:07  my_flash  阅读(153)  评论(0)    收藏  举报