Java JVM xmx xms 环境调优
参数说明
说明:
- JVM 初始分配的内存由 -Xms 指定,默认是物理内存的1/64
- JVM 最大分配的内存由 -Xmx 指 定,默认是物理内存的1/4
- 默认空余堆内存小于 40% 时,JVM就会增大堆直到-Xmx的最大限制
- 空余堆内存大于 70% 时,JVM会减少堆直到-Xms的最小限制
- 因此服务器一般设置 -Xms、 -Xmx 相等以避免在每次 GC 后调整堆的大小
可以利用JVM提供的 -Xmn -Xms -Xmx 等选项可进行堆内存设置,一般的要将-Xms 和-Xmx 选项设置为相同,而 -Xmn 为 1/4 的 -Xmx 值,建议堆的最大值设置为可用内存的最大值的80%。
堆设置
- -Xms: 初始堆大小,应用程序的最小内存大小
- -Xmx: 最大堆大小,应用程序的最大内存大小 (-Xmx >= -Xms)
- -XX:NewSize=n: 设置年轻代大小
- -XX:NewRatio=n: 设置年轻代和年老代的比值
- 如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
- -XX:SurvivorRatio=n: 年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个
- 如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
- -XX:MaxPermSize=n: 设置持久代大小
说明:
- Xms/Xmx 可使用兆字节 (m) 或千兆字节 (g) 来指定 size。例如:-Xmx2g 设置 2GB 的最大堆大小。
- 有关缺省值的信息,请参阅 JVM 的缺省设置。
收集器设置
- -XX:+UseSerialGC: 设置串行收集器
- -XX:+UseParallelGC: 设置并行收集器
- -XX:+UseParalledlOldGC: 设置并行年老代收集器
- -XX:+UseConcMarkSweepGC: 设置并发收集器
垃圾回收统计信息
- -XX:+PrintGC
- -XX:+PrintGCDetails
- -XX:+PrintGCTimeStamps
- -Xloggc:filename
并行收集器设置
- -XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。
- -XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
- -XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)
并发收集器设置
- -XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。
- -XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数。
使用示例
堆起始为 2 MB,可增加到最大值 64 MB。
堆起始为 100 MB,从不增长。
堆起始为 20 MB,可增加到最大值 1 GB。
堆起始为 50 MB,可增加到缺省最大值。
堆起始为缺省初始值,并且可增加到最大值 256 MB。
如果超出 -Xmx 选项所设置的限制,那么 JVM 会生成 OutofMemoryError。