文章目录
JVM 常见配置汇总:
查看jvm所有参数默认值
java -XX:+PrintFlagsInitial -version
查看jvm所有的参数, 只限于JDK 1.6或以上版本
java -XX:+PrintFlagsFinal -version
统计当前Java版本支持的JVM参数的个数
java -XX:+PrintFlagsFinal -XX:+UnlockDiagnosticVMOptions -version | wc -l
查看当前JVM运行的参数
jinfo -flags <pid>
内存分配相关
参数 | 作用 |
---|---|
-Xms | 初始堆大小,默认是物理内存的1/64,单位为兆 m/M, 例如 -Xms10m |
-Xmx | 最大堆大小,默认是物理内存的1/4,单位为兆 m/M, 例如 -Xmx10m |
-Xss | -Xss128k,表示可以设置虚拟机栈的大小为128k |
-Xoss | -Xoss128k,表示设置本地方法栈的大小为128k。不过HotSpot并不区分虚拟机栈和本地方法栈,因此对于HotSpot来说这个参数是无效的 |
-XX:NewSize=n | 设置年轻代大小 |
-XX:PermSize | -XX:PermSize=10M,表示JVM初始分配的永久代的容量,必须以m/M为单位 |
-XX:MaxPermSize=n | 表示JVM允许分配的永久代的最大容量,必须以m/M为单位,大部分情况下这个参数默认为64M |
-XX:NewRatio=n | 设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4 |
-XX:SurvivorRatio | Eden与Survivor区的比例 |
-XX:+/-UseTLAB | 是否使用TLAB来创建对象 |
-XX:PretenureSizeThreshold | 晋升老年代对象大小 |
GC相关
参数 | 作用 |
---|---|
-Xnoclassgc | 表示关闭JVM对类的垃圾回收 |
-XX:+UseSerialGC | 设置串行收集器 |
-XX:+UseParallelGC | 设置并行收集器 |
-XX:+UseParalledlOldGC | 设置并行年老代收集器 |
-XX:+UseConcMarkSwerrpGC | 设置并发收集器,指定老年代的GC收集器为CMS |
-XX:+UseParNewGC | 指定新生代GC收集器为ParNew |
-XX:ParallelGCThreads=n | 设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数 |
-XX:MaxGCPauseMillis=n | 设置并行收集最大暂停时间(以牺牲吞吐量为代价) |
-XX:GCTimeRatio=n | 设置垃圾回收时间占程序运行时间的百分比。GC吞吐量,计算方式为吞吐量=1/(1+n),n为设定的值 |
-XX:CMSInitiatingOccupancyFraction | 用于设置触发GC的百分比,在jdk 1.6中,这个值时92% |
-XX:+CMSIncrementalMode | 设置为增量模式。适用于单CPU情况。 |
垃圾回收统计信息
参数 | 作用 |
---|---|
-XX:+PrintGC | 表示在控制台上打印出GC具体细节 |
-XX:+UseG1GC | 表示让JVM使用G1垃圾收集器 |
-XX:+PrintGCDetails | |
-XX:+PrintGCTimeStamps | |
-Xloggc:filename |
异常相关
参数 | 作用 |
---|---|
-XX:+HeapDumpOnOutOfMemoryError | 在出现OOM异常之后自动生成heapdump文件,类似 java_pid*.hprof 文件 |
-XX:+HeapDumpOnCtrlBreak | 使用Ctrl+Break键可以让虚拟机生成heapdump文件 |
总结
Java heap size 设置不合理会引发什么问题?
在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息:java.lang.OutOfMemoryError: Java heap space
如果Heap Size设置偏小,除了这些异常信息外,还会发现程序的响应速度变慢了。GC占用了更多的时间,而应用分配到的执行时间较少。
Heap size的-Xms -Xmn 设置不要超出物理内存的大小。否则会提示“Error occurred during initialization of VM Could not reserve enough space for object heap”。
-Xms、-Xmx参数配置
Java 虚拟机在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。但是在实际运行中是不够的,因为需要进行内存扩大。我们可以利用Java 虚拟机提供的-Xms -Xmx等选项可进行设置。
默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制。
因此服务器一般设置-Xms、-Xmx相等,以避免在每次GC 后调整堆的大小。对象的堆内存由称为垃圾回收器的自动内存管理系统回收。
HeapDumpOnOutOfMemoryError
一. 配置方法
在JAVA_OPTIONS变量中增加
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${目录}。
二. 参数说明
(1)-XX:+HeapDumpOnOutOfMemoryError参数表示当JVM发生OOM时,自动生成DUMP文件。如果不用 HeapDumpPath 选项指定转储路径,则会自动保存到启动目录下。
(2)-XX:HeapDumpPath=${目录}参数表示生成DUMP文件的路径,也可以指定文件名称,例如:-XX:HeapDumpPath=${目录}/java_heapdump.hprof。如果不指定文件名,默认为:java_<pid>_<date>_<time>_heapDump.hprof。
特别说明:
不建议内存溢出文件名写死,建议只写路径;否则,再次发生内存溢出,内存溢出文件无法成功保存。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/155696.html