jvm 参数

内存相关参数

  • -Xmx1024m:设置JVM最大可用内存为 1024M。

  • -Xms1024m:设置JVM初始内存为 1024M。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

  • -Xmn200m: 设置年轻代大小为200M

  • -Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。

  • -XX:NewRatio=2:新生代占比例1,老年代占比例2,年轻代占整个堆的1/3。2也是默认值

  • -XX:SurvivorRatio=2:设置年轻代中Eden区与Survivor区的大小比值。设置为2,则两个 Survivor 区与一个 Eden 区的比值为 2:2。默认为 8,即 Survivor 占了 8。

  • -XX:MaxTenuringThreshold=0:设置垃圾最大年龄,默认值 15。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。

MetaspaceSize

  • -XX:PermSize=16m: 设置持久代初始值为 16m。

  • -XX:MaxPermSize=16m: 设置持久代最大为 16m。该参数在 jdk8 后废弃,由 -XX:MaxMetaspaceSize=512m 代替。

  • 以下内容来自:https://blog.csdn.net/wuhenzhangxing/article/details/78224905

  • JDK8中已经完全移除了永久带。这项工作是在这个bug:https://bugs.openjdk.java.net/browse/JDK-6964458推动下完成的。JDK8中,PermSize和MaxPermSize参数也一并移除了。

  • 在移除了Perm区域之后,JDK 8中使用MetaSpace来替代,这些空间都直接在堆上来进行分配。 在JDK8中,类的元数据存放在native堆中,这个空间被叫做:元数据区。JDK8中给元数据区添加了一些新的参数。

  • -XX:MetaspaceSize=20m 是分配给类元数据区的初始大小。默认 20m。

  • -XX:MaxMetaspaceSize=512m 是分配给类元数据区的最大值。默认 4G。

  • -XX:MinMetaspaceFreeRatio=40 最小空闲比,当 Metaspace 发生 GC 后,会计算 Metaspace 的空闲比,如果空闲比(空闲空间/当前 Metaspace 大小)小于此值,就会触发 Metaspace 扩容。默认值是 40 ,也就是 40%

  • -XX:MaxMetaspaceFreeRatio=70 最大空闲比,当 Metaspace 发生 GC 后,会计算 Metaspace 的空闲比,如果空闲比(空闲空间/当前 Metaspace 大小)大于此值,就会触发 Metaspace 释放空间。默认值是 70 ,也就是 70%

(我们 没有设置 MetaspaceSize 相关参数,全部默认)

另外,还参考:https://www.jianshu.com/p/b448c21d2e71

回收相关参数

  • -XX:+UseParNewGC:并发串行收集器,它是工作在新生代的垃圾收集器,它只是将串行收集器多线程化,除了这个并没有太多创新之处,而且它们共用了相当多的代码。它与串行收集器一样,也是独占式收集器,在收集过程中,应用程序会全部暂停。但它却是许多运行在 Server 模式下的虚拟机中首选的新生代收集器,其中有一个与性能无关但很重要的原因是,除了 Serial 收集器外,目前只有它能与 CMS 收集器配合工作。

  • -XX:+UseParallelGC:并行收集器,同时运行在多个cpu之间,物理上的并行收集器,跟上面的收集器一样也是独占式的,但是它最大化的提高程序吞吐量,同时缩短程序停顿时间,另外它不能与CMS收集器配合工作。
    UseParallelGC = Parallel Scavenge + Parallel Old。从 Full GC log:[Full GC (Ergonomics) [PSYoungGen: 61456K->0K(196608K)] [ParOldGen: 254221K->171116K(262144K)] 中也可以看出老年代用的是 ParOldGen。
    (我们即用此)

  • -XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集。

  • -XX:ParallelGCThreads=6: 并行垃圾收集线程数。

  • -XX:-UseAdaptiveSizePolicy ,-XX:+UseAdaptiveSizePolicy 默认开启,后期会自动调节 Survivor 区的大小,取消自适应即可使得-XX:SurvivorRatio 生效。故 -XX:-UseAdaptiveSizePolicy 配合 -XX:SurvivorRatio 使用。

  • -XX:+DisableExplicitGC,忽略手动调用GC的代码使得 System.gc()的调用就会变成一个空调用,完全不会触发任何GC。

  • -XX:-OmitStackTraceInFastThrow,这是HotSpot VM专门针对异常做的一个优化,称为fast throw,当一些异常在代码里某个特定位置被抛出很多次的话,HotSpot Server Compiler(C2)会用fast throw来优化这个抛出异常的地方,直接抛出一个事先分配好的、类型匹配的对象,这个对象的message和stack trace都被清空。
    可以明确:抛出这个异常非常快,不用额外分配内存,也不用爬栈。
    副作用:正好是需要知道哪里出问题的时候看不到stack trace了,不利于排查问题。
    如果遇到没有stack trace的问题,可以考虑通过 -XX:-OmitStackTraceInFastThrow 禁用该默认的优化。

  • -XX:+PrintGCDetails,gc log 打印详细信息。

  • -XX:+PrintGCDateStamps,输出GC的时间戳。

  • -Xloggc: B A S E D I R / . . / . . / l o g s / g c − {BASE_DIR}/../../logs/gc- BASEDIR/../../logs/gc{TASK_NAME}.log,gc log 路径及文件命名。

  • -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/log/,
    HeapDumpOnOutOfMemoryError,表示当JVM发生OOM时,自动生成DUMP文件。HeapDumpPath 表示生成DUMP文件的路径,也可以指定文件名称,例如:-XX:HeapDumpPath=${目录}/java_heapdump.hprof。如果不指定文件名,默认为:java_

查看 jvm 参数

  • jps -v : 查看进程运行中所有 jvm 参数,如:
    27341 TaskLoader -Djingwei.type=task -Djingwei.task.name=O_T_DD_492987 -Xms256m -Xmx256m -Xss1m -Djute.maxbuffer=10240000 -XX:PermSize=64m -XX:MaxPermSize=64m -XX:+UseParallelGC -XX:-UseAdaptiveSizePolicy -XX:SurvivorRatio=2 -XX:NewRatio=1 -XX:ParallelGCThreads=6 -XX:-OmitStackTraceInFastThrow -Djava.net.preferIPv4Stack=true -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+DisableExplicitGC -Xloggc:/home/admin/jingwei3-worker/target/jingwei3-worker.standalone/bin/…//…/…/logs/gc-O_T_DD_492987.log -Dmemory=256

  • java -XX:+PrintCommandLineFlags -version:查看机器上 jvm 默认参数
    -XX:InitialHeapSize=268435456 -XX:MaxHeapSize=4294967296 -XX:MaxNewSize=697933824 -XX:MaxTenuringThreshold=6 -XX:OldPLABSize=16 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
    java version “1.8.0_242”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值