1.JVM参数
1.1 参数分类
-XX:[+/-] -XX:+UseG1GC
-XX:<name>=<value> -XX:InitialHeapSize=100M
-Xms100M 相当于 -XX:InitialHeapSize=100M
-Xmx100M -Xss100
1.2 常用参数
1.2.1 堆分配参数
参数 | 含义 |
---|
-Xmn10M | 设置新生代区域大小为10M |
-XX:NewSize=2M | 设置新生代初始大小为2M |
-XX:MaxNewSize=2M | 设置新生代最大值为2M |
(如果以上三个同时设置了,谁在后面谁生效。生产环境使用-Xmn即可) | |
-Xms128M | 设置java程序启动时堆内存128M(默认为物理内存1/64,且小于1G) |
-Xmx256M | 设置最大堆内存256M,超出后会出现 OutOfMemoryError(默认为物理内存1/64,且小于1G) |
(生产环境 -Xms 与 -Xmx 最好一样,避免抖动) | |
-Xss1M | 设置线程栈的大小 1M(默认1M) |
-XX:ThreadStackSize,-Xss 设置在后面,以-Xss为准; -XX:ThreadStackSize设置在后面,主线程以 -Xss为准,其他线程以 -XX:ThreadStackSize为准 | |
-XX:MinHeapFreeRatio=40 | 设置堆空间最小空闲比例(默认40)(当-Xmx与-Xms相等时,该配置无效) |
-XX:MaxHeapFreeRatio=70 | 设置堆空间最大空闲比例(默认70)(当-Xmx与-Xms相等时,该配置无效) |
-XX:NewRatio=2 | 设置年轻代与年老代的比例为2:1 |
-XX:SurvivorRatio=8 | 设置年轻代中eden区与survivor区的比例为8:1 |
-XX:MetaspaceSize=64M | 设置元数据空间初始大小(取代-XX:PermSize) |
-XX:MaxMetaspaceSize=128M | 设置元数据空间最大值(取代之前-XX:MaxPermSize) |
-XX:TargetSurvivorRatio=50 | 设置survivor区使用率。当survivor区达到50%时,将对象送入老年代 |
-XX:+UseTLAB | 在年轻代空间中使用本地线程分配缓冲区(TLAB),默认开启 |
-XX:TLABSize=512k | 设置TLAB大小为512k |
-XX:+UseCompressedOops | 使用压缩指针,默认开启 |
-XX:MaxTenuringThreshold=15 | 对象进入老年代的年龄(Parallel是15,CMS是6) |
1.2.2 垃圾回收器相关
参数 | 含义 |
---|
-XX:+UseAdaptiveSizePolicy | 打开自适应GC策略(该摸式下,各项参数都会被自动调整) |
-XX:MaxGCPauseMillis | 设置最大垃圾收集停顿时间(收集器工作时会调整其他参数大小,尽可能将停顿控制在指定时间内) |
-XX:+UseSerialGC | 在年轻代和年老代使用串行回收器 |
-XX:+UseParallelGC | 使用并行垃圾回收收集器,默认会同时启用 -XX:+UseParallelOldGC(默认使用该回收器) |
-XX:+UseParallelOldGC | 开启老年代使用并行垃圾收集器,默认会同时启用 -XX:+UseParallelGC |
-XX:ParallelGCThreads=4 | 设置用于垃圾回收的线程数为4(默认与CPU数量相同) |
-XX:+UseConcMarkSweepGC | 使用CMS收集器(年老代) |
-XX:CMSInitiatingOccupancyFraction=80 | 设置CMS收集器在年老代空间被使用多少后触发 |
-XX:+CMSClassUnloadingEnabled | 允许对类元数据进行回收 |
-XX:+UseCMSInitiatingOccupancyOnly | 只在达到阈值的时候,才进行CMS回收 |
-XX:+UseG1GC | 使用G1回收器 |
-XX:G1HeapRegionSize=16m | 使用G1收集器时设置每个Region的大小(范围1M - 32M) |
-XX:MaxGCPauseMillis=500 | 设置最大暂停时间(毫秒) |
-XX:+DisableExplicitGC | 禁止显示GC的调用(即禁止开发者的 System.gc();) |
1.2.3 GC日志
参数 | 含义 |
---|
-XX:+PrintGCDetails | 打印GC信息 |
-XX:+PrintGCTimeStamps | 打印每次GC的时间戳(现在距离启动的时间长度) |
-XX:+PrintGCDateStamps | 打印GC日期 |
-XX:+PrintHeapAtGC | 每次GC时,打印堆信息 |
-Xloggc:/usr/local/tomcat/logs/gc.$$.log | GC日志存放的位置 |
1.2.4 堆快照
参数 | 含义 |
---|
-XX:+HeapDumpOnOutOfMemoryError | 出现内存溢出时存储堆信息,配合 -XX:HeapDumpPath 使用 |
-XX:HeapDumpPath=/usr/local/tomcat/logs/oom.%t.log | 堆快照存储位置 |
-XX:+UseLargePages | 使用大页 |
-XX:LargePageSizeInBytes=4m | 指定大页的大小(必须为2的幂) |
1.2.5 滚动日志记录
参数 | 含义 |
---|
-XX:+UseGCLogFileRotation | 开启滚动日志记录 |
-XX:NumberOfGCLogFiles=5 | 滚动数量,命名为filename.0, filename.1 … filename.n-1, 然后再从filename.0 开始,并覆盖已经存在的文件 |
-XX:GCLogFileSize=8k | 每个文件大小,当达到该指定大小时,会写入下一个文件 |
-Xloggc:/gc/log | 日志文件位置 |