精华内容
下载资源
问答
  • JVM参数设置

    万次阅读 多人点赞 2018-09-21 17:55:05
    JVM参数设置 基本参数 通过一张图来了解如何通过参数来控制各区域的内存大小 控制参数 -Xms设置堆的最小空间大小。 -Xmx设置堆的最大空间大小。 -XX:NewSize设置新生代最小空间大小。 -XX:MaxNewSize设置...

    JVM参数设置

    基本参数

    通过一张图来了解如何通过参数来控制各区域的内存大小

    image

    控制参数

    • -Xms设置堆的最小空间大小。
    • -Xmx设置堆的最大空间大小。
    • -XX:NewSize设置新生代最小空间大小。
    • -XX:MaxNewSize设置新生代最大空间大小。
    • -XX:PermSize设置永久代最小空间大小。
    • -XX:MaxPermSize设置永久代最大空间大小。
    • -Xss设置每个线程的堆栈大小。

    没有直接设置老年代的参数,但是可以设置堆空间大小和新生代空间大小两个参数来间接控制。

    老年代空间大小=堆空间大小-年轻代大空间大小

    image

    VM内存区域总体分两类,heap区 和 非heap 区 。

    • heap区: 堆区分为Young Gen(新生代),Tenured Gen(老年代-养老区)。其中新生代又分为Eden Space(伊甸园)、Survivor Space(幸存者区)。
    • 非heap区: Code Cache(代码缓存区)、Perm Gen(永久代)、Jvm Stack(java虚拟机栈)、Local Method Statck(本地方法栈)。

    为什么要区分新生代和老生代?

    堆中区分的新生代和老年代是为了垃圾回收,新生代中的对象存活期一般不长,
    而老年代中的对象存活期较长,所以当垃圾回收器回收内存时,新生代中垃圾回收效果较好,
    会回收大量的内存,而老年代中回收效果较差,内存回收不会太多。

    不同代采用的算法区别?

    基于以上特性,新生代中一般采用复制算法,因为存活下来的对象是少数,
    所需要复制的对象少,而老年代对象存活多,不适合采用复制算法,
    一般是标记整理和标记清除算法。
    因为复制算法需要留出一块单独的内存空间来以备垃圾回收时复制对象使用,
    所以将新生代分为eden区和两个survivor区,每次使用eden和一个survivor区,
    另一个survivor作为备用的对象复制内存区。

    请看下面题目:

    对于jvm内存配置参数:

    -Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3

    其最小内存值和Survior区总大小分别是: 10240m,2048m

    我们只需要知道Survior区有两个,就是图中的S0和S1,
    而Eden区只用一个, -XXSurvivorRatio参数是Eden区和单个Survior区的比例,
    所以应该有(3+1+1)*Survior=5012m,图中问的是Survior总大小(需乘2)

    全局参数

    JVM参数设置、分析

    典型配置举例

    堆大小设置

    • 年轻代的设置很关键

    JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt 还是 64-bit)限制;系
    统的可用虚拟内存限制;系统的可用物理内存限制。 32 位系统下,一般限制在 1.5G~2G;
    64 为操作系统对内存无限制。在 Windows Server 2003 系统, 3.5G 物理内存, JDK5.0 下
    测试,最大可设置为 1478m。

    典型配置

    java -Xmx3550m -Xms3550m -Xmn2g –Xss128k

    • -Xmx3550m: 设置 JVM 最大可用内存为 3550M。

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

    • -Xmn2g: 设置年轻代大小为 2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。
      持久代一般固定大小为 64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能
      影响较大, Sun 官方推荐配置为整个堆的 3/8。

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

    java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0

    • -XX:NewRatio=4: 设置年轻代(包括 Eden 和两个 Survivor 区)与年老代的比值(除去持久
      代)。设置为 4,则年轻代与年老代所占比值为 1: 4,年轻代占整个堆栈的 1/5

    • -XX:SurvivorRatio=4: 设置年轻代中 Eden 区与 Survivor 区的大小比值。设置为 4,则两
      个 Survivor 区与一个 Eden 区的比值为 2:4,一个 Survivor 区占整个年轻代的 1/6

    • -XX:MaxPermSize=16m: 设置持久代大小为 16m。

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

    回收器选择

    JVM 给了三种选择: 串行收集器、并行收集器、并发收集器,但是串行收集器只适用于小
    数据量的情况,所以这里的选择主要针对并行收集器和并发收集器。默认情况下, JDK5.0
    以前都是使用串行收集器,如果想使用其他收集器需要在启动时加入相应参数。 JDK5.0 以
    后, JVM 会根据当前系统配置进行判断。

    吞吐量优先的并行收集器

    如上文所述,并行收集器主要以到达一定的吞吐量为目标,适用于科学技术和后台处理等。

    典型配置

    java -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20

    • -XX:+UseParallelGC: 选择垃圾收集器为并行收集器。 此配置仅对年轻代有效。即上述配
      置下,年轻代使用并发收集,而年老代仍旧使用串行收集。
    • -XX:ParallelGCThreads=20: 配置并行收集器的线程数,即:同时多少个线程一起进行垃
      圾回收。此值最好配置与处理器数目相等。

    java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC

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

    java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100

    • -XX:MaxGCPauseMillis=100: 设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,
      JVM 会自动调整年轻代大小,以满足此值。

    java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100 -XX:+UseAdaptiveSizePolicy

    • -XX:+UseAdaptiveSizePolicy:设置此选项后,并行收集器会自动选择年轻代区大小和相
      应的 Survivor 区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使
      用并行收集器时,一直打开。

    响应时间优先的并发收集器

    如上文所述,并发收集器主要是保证系统的响应时间,减少垃圾收集时的停顿时间。适用于
    应用服务器、 电信领域等。

    典型配置

    java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:ParallelGCThreads=20 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC

    • -XX:+UseConcMarkSweepGC: 设置年老代为并发收集。测试中配置这个以后,
      -XX:NewRatio=4 的配置失效了,原因不明。所以,此时年轻代大小最好用-Xmn 设置。
    • -XX:+UseParNewGC: 设置年轻代为并行收集。可与 CMS 收集同时使用。 JDK5.0 以上,
      JVM 会根据系统配置自行设置,所以无需再设置此值。

    java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection

    • -XX:CMSFullGCsBeforeCompaction: 由于并发收集器不对内存空间进行压缩、整理,所
      以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次 GC 以后对内
      存空间进行压缩、整理。
    • -XX:+UseCMSCompactAtFullCollection: 打开对年老代的压缩。可能会影响性能,但是
      可以消除碎片

    辅助信息

    JVM 提供了大量命令行参数,打印信息,供调试使用。主要有以下一些:

    • -XX:+PrintGC: 输出形式: [GC 118250K->113543K(130112K), 0.0094143 secs] [Full GC 121376K->10414K(130112K), 0.0650971 secs]

    • -XX:+PrintGCDetails: 输出形式: [GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs] [GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]

    • -XX:+PrintGCTimeStamps -XX:+PrintGC: PrintGCTimeStamps 可与上面两个混合使用
      输出形式:11.851: [GC 98328K->93620K(130112K), 0.0082960 secs]

    • -XX:+PrintGCApplicationConcurrentTime: 打印每次垃圾回收前,程序未中断的执行时
      间。可与上面混合使用。输出形式:Application time: 0.5291524 seconds

    • -XX:+PrintGCApplicationStoppedTime: 打印垃圾回收期间程序暂停的时间。可与上面
      混合使用。输出形式: Total time for which application threads were stopped: 0.0468229 seconds

    • -XX:PrintHeapAtGC: 打印 GC 前后的详细堆栈信息。输出形式:
      34.702: [GC {Heap before gc invocations=7: def new generation total 55296K, used 52568K [0x1ebd0000, 0x227d0000, 0x227d0000) eden space 49152K, 99% used [0x1ebd0000, 0x21bce430, 0x21bd0000) from space 6144K, 55% used [0x221d0000, 0x22527e10, 0x227d0000) to space 6144K, 0% used [0x21bd0000, 0x21bd0000, 0x221d0000) tenured generation total 69632K, used 2696K [0x227d0000, 0x26bd0000, 0x26bd0000) the space 69632K, 3% used [0x227d0000, 0x22a720f8, 0x22a72200, 0x26bd0000) compacting perm gen total 8192K, used 2898K [0x26bd0000, 0x273d0000, 0x2abd0000) the space 8192K, 35% used [0x26bd0000, 0x26ea4ba8, 0x26ea4c00, 0x273d0000) ro space 8192K, 66% used [0x2abd0000, 0x2b12bcc0, 0x2b12be00, 0x2b3d0000) rw space 12288K, 46% used [0x2b3d0000, 0x2b972060, 0x2b972200, 0x2bfd0000) 34.735: [DefNew: 52568K->3433K(55296K), 0.0072126 secs] 55264K->6615K(124928K)Heap after gc invocations=8: def new generation total 55296K, used 3433K [0x1ebd0000, 0x227d0000, 0x227d0000) eden space 49152K, 0% used [0x1ebd0000, 0x1ebd0000, 0x21bd0000) from space 6144K, 55% used [0x21bd0000, 0x21f2a5e8, 0x221d0000) to space 6144K, 0% used [0x221d0000, 0x221d0000, 0x227d0000) tenured generation total 69632K, used 3182K [0x227d0000, 0x26bd0000, 0x26bd0000) the space 69632K, 4% used [0x227d0000, 0x22aeb958, 0x22aeba00, 0x26bd0000) compacting perm gen total 8192K, used 2898K [0x26bd0000, 0x273d0000, 0x2abd0000) the space 8192K, 35% used [0x26bd0000, 0x26ea4ba8, 0x26ea4c00, 0x273d0000) ro space 8192K, 66% used [0x2abd0000, 0x2b12bcc0, 0x2b12be00, 0x2b3d0000) rw space 12288K, 46% used [0x2b3d0000, 0x2b972060, 0x2b972200, 0x2bfd0000) } , 0.0757599 secs]

    • -Xloggc:filename: 与上面几个配合使用,把相关日志信息记录到文件以便分析

    常见配置汇总

    堆设置

    • -Xms: 初始堆大小
    • -Xmx: 最大堆大小
    • -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: 设置持久代大小

    收集器设置

    • -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
      数。并行收集线程数。
    展开全文
  • jvm参数设置

    2013-01-23 17:30:11
    linux 下jvm基本参数设置 查看linux jvm的设置基本命令
  • JVM 参数设置

    千次阅读 2017-10-17 11:02:34
    JVM参数 参数名称 含义 默认值 示例 说明 -Xms 初始堆大小 物理内存的1/64( -Xms1000M 默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制. -...

    示例为默认值的不需要配置,使用默认设置

    JVM参数

    参数名称 含义 默认值 示例 说明
    -Xms 初始堆大小 物理内存的1/64(<1GB) ,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值 -Xms1000M 默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制.
    -Xmx 最大堆大小 物理内存的1/4(<1GB),最佳设值应该视物理内存大小及计算机内其他内存开销而定 -Xms1000M 默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制
    -Xmn 年轻代大小(1.4or lator) 不熟悉最好保留默认值 默认值 注意:此处的大小是(eden+ 2 survivor space)。与jmap -heap中显示的New gen是不同的。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。增大年轻代后,将会减小年老代大小.此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8
    -XX:NewSize 设置年轻代大小(for 1.3/1.4) 不需要设置
    -XX:MaxNewSize 年轻代最大值(for 1.3/1.4) 不需要设置
    -XX:PermSize 设置持久代(perm gen)初始值 物理内存的1/64,不熟悉保留默认值 默认值
    -XX:MaxPermSize 设置持久代最大值 物理内存的1/4,不熟悉保留默认值 默认值
    -Xss 每个线程的堆栈大小 JDK5.0 以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K. 默认值 根据应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程.但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右,一般小的应用, 如果栈不是很深, 应该是128k够用的 大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。(校长)和threadstacksize选项解释很类似,官方文档似乎没有解释,在论坛中有这样一句话:"”-Xss is translated in a VM flag named ThreadStackSize”一般设置这个值就可以了。
    -XX:ThreadStackSize Thread Stack Size 上面的-Xss不需要设置,如果要设置直接设置这个参数就可以 默认值 (0 means use default stack size) [Sparc: 512; Solaris x86: 320 (was 256 prior in 5.0 and earlier); Sparc 64 bit: 1024; Linux amd64: 1024 (was 0 in 5.0 and earlier); all others 0.]
    -XX:NewRatio 年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代) Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。 默认值 -XX:NewRatio=4表示年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5。
    -XX:SurvivorRatio Eden区与Survivor区的大小比值   默认值 设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10
    -XX:LargePageSizeInBytes 内存页的大小 =128m,不可设置过大, 会影响Perm的大小 默认值 128m
    -XX:+UseFastAccessorMethods 原始类型的快速优化(jdk 1.6 or later) - 默认值
    -XX:+DisableExplicitGC 关闭System.gc() - 默认值 这个参数需要严格的测试
    -XX:MaxTenuringThreshold 垃圾最大年龄,表示对象被移到老年代的年龄阈值的最大值 15 默认值 控制对象能经过几次GC才被转移到老年代。回收如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代. 对于年老代比较多的应用,可以提高效率.如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活 时间,增加在年轻代即被回收的概率。该参数只有在串行GC时才有效。
    -XX:+AggressiveOpts 加快编译 - 默认值 启用该选项之后,需要考虑到性能的提升,同样也需要考虑到性能提升所带来的不稳定风险。
    -XX:+UseBiasedLocking 锁机制的性能改善 (Java 5 update 6 or later) + 默认值 Java 5 HotSpot JDK需要明确的命令来启用这个特性,在使用-XX:+AggressiveOpts选项,有偏见的锁会Java 5中会被自动启用。在Java 6中是默认启用的。
    -XX:TLABWasteTargetPercent TLAB占eden区的百分比 1% 默认值
    -XX:+CollectGen0First FullGC时是否先YGC false 默认值

    收集器相关参数

    参数名称 含义 默认值 示例 说明
    -XX:+UseParNewGC 设置年轻代为并行收集 - + 可与CMS收集同时使用,JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值
    -XX:ParallelGCThreads 并行收集器的线程数 默认为CPU核心数 默认值 此值最好配置与处理器数目相等 同样适用于CMS
    -XX:+UseConcMarkSweepGC 使用CMS内存收集 - + 注意最新的JVM版本,当开启此选项时,-XX:UseParNewGC会自动开启。因此,如果年轻代的并行GC不想开启,可以通过设置-XX:-UseParNewGC来关掉。
    -XX:ParallelCMSThreads CMS并发收集线程数 默认为CPU核心数 默认值 如果还标志未设置,JVM会根据并行收集器中的-XX:ParallelGCThreads参数的值来计算出默认的并行CMS线程数。该公式是ConcGCThreads = (ParallelGCThreads + 3)/4。因此,对于CMS收集器, -XX:ParallelGCThreads标志不仅影响“stop-the-world”垃圾收集阶段,还影响并发阶段。总之,有不少方法可以配置CMS收集器的多线程执行。正是由于这个原因,建议第一次运行CMS收集器时使用其默认设置, 然后如果需要调优再进行测试
    -XX:+UseCMSCompactAtFullCollection 在FULL GC的时候, 对年老代的压缩 - + CMS是不会移动内存的, 因此, 这个非常容易产生碎片, 导致内存不够用, 因此, 内存的压缩这个时候就会被启用。 增加这个参数是个好习惯。可能会影响性能,但是可以消除碎片
    -XX:CMSFullGCsBeforeCompaction full gc多少次后进行内存压缩 默认为0 默认值 由于并发收集器不对内存空间进行压缩,整理,所以运行一段时间以后会产生"碎片",使得运行效率降低.此值设置运行多少次GC以后对内存空间进行压缩,整理.
    -XX:CMSInitiatingOccupancyFraction 老年代使用70%后开始CMS收集 =92 =75 为了保证不出现promotion failed(见下面介绍)错误,该值的设置需要满足以下公式
    -XX:+CMSClassUnloadingEnabled 持久代使用CMS并发收集 jdk1.7默认关闭,1.8默认打开 - 它会增加CMS remark的暂停时间,如果没有程序产生大量的临时类,新类加载并不频繁,这个参数还是不开的好
    -XX:CMSInitiatingPermOccupancyFraction 设置Perm Gen使用到达多少比率时触发 =92 默认值

    日志

    参数名称 含义 默认值 示例 说明
    -Xloggc 记录日志文件位置 /data/log/jetty/gc.log
    -XX:+PrintGCDateStamps 打印可读的日期而不是时间戳 - +
    -XX:+PrintGCDetails 打印日志详情 - + 输出形式:[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs][GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]
    -XX:+PrintGCApplicationStoppedTime 打印GC停顿时间 - + 它除了打印清晰的GC停顿时间外,还可以打印其他的停顿时间,比如取消偏向锁,class 被agent redefine,code deoptimization等等,有助于发现一些原来没想到的问题,建议也加上。输出形式:Total time for which application threads were stopped: 0.0468229 seconds
    -XX:+PrintCommandLineFlags 打印已配置的XX类参数 - + 打印出命令行里设置了的参数以及因为这些参数隐式影响的参数,比如开了CMS后,-XX:+UseParNewGC也被自动打开
    -XX:+HeapDumpOnOutOfMemoryError 输出Heap Dump到指定文件 - + 在Out Of Memory,JVM快死快死掉的时候,输出Heap Dump到指定文件。不然开发很多时候还真不知道怎么重现错误。路径只指向目录,JVM会保持文件名的唯一性,叫java_pid${pid}.hprof。如果指向文件,而文件已存在,反而不能写入。
    -XX:HeapDumpPath 设置Heap Dump输出路径 =${LOGDIR}/

    JAVA文件相关配置
    -Dcom.meizu.properties.key=x1YfmdjyFdu68KJ
    -Dcom.meizu.properties.encrypt=true
    -Djava.io.tmpdir=/dev/shm
    -Dfile.encoding=UTF-8
    -Dsun.jnu.encoding=UTF-8
    -Dsun.net.http.allowRestrictedHeaders=true

    小结
    性能相关

    -XX:-UseBiasedLocking -XX:-UseCounterDecay -XX:AutoBoxCacheMax=20000 -XX:+PerfDisableSharedMem -XX:+AlwaysPreTouch -Djava.security.egd=file:/dev/./urandom

    内存大小相关(JDK7)

    -Xms4096m -Xmx4096m -Xmn2048m -XX:MaxDirectMemorySize=4096m-XX: PermSize=256m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=240M

    CMS GC 相关

    -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:MaxTenuringThreshold=6 -XX:+ExplicitGCInvokesConcurrent -XX:+ParallelRefProcEnabled

    GC 日志 相关

    -Xloggc:/dev/shm/app-gc.log -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps -XX:+PrintGCDetails

    异常 日志 相关

    -XX:-OmitStackTraceInFastThrow -XX:ErrorFile=${LOGDIR}/hs_err_%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${LOGDIR}/

    各个环境参数设置方式:

    1. JAR包参数设置模版:java -jar -Xms1000M -Xmx1000M -Dxxx time4miracles.jar
    2. 当在服务器环境下(如Tomcat)启动并使用JVM时(对当前服务器环境下所以Java程序生效):
      a. 设置环境变量:
      变量名:CATALINA_OPTS
      变量值:-Xms1000M -Xmx1000M
      b. 打开Tomcat根目录下的bin文件夹,编辑catalina.bat,将其中的%CATALINA_OPTS%(共有四处)替换为:-Xms1000M -Xmx1000M

    JAVA代码环境中查看设置JVM内存信息

    Runtime.getRuntime().maxMemory(); //最大可用内存,对应-Xmx。
    Runtime.getRuntime().freeMemory(); //当前JVM空闲内存。
    Runtime.getRuntime().totalMemory(); //当前JVM占用的内存总数,其值相当于当前JVM已使用的内存及freeMemory()的总和。

    maxMemory()为JVM的最大可用内存,可通过-Xmx设置,默认值为物理内存的1/4,设值不能高于计算机物理内存;
    totalMemory()为当前JVM占用的内存总数,其值相当于当前JVM已使用的内存及freeMemory()的总和,会随着JVM使用内存的增加而增加;
    freeMemory()为当前JVM空闲内存,因为JVM只有在需要内存时才占用物理内存使用,所以freeMemory()的值一般情况下都很小,而JVM实际可用内存并不等于freeMemory(),而应该等于maxMemory()-totalMemory()+freeMemory()。及其设置JVM内存分配。

    更详细内容参见:
    http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html
    https://www.ishuo.cn/doc/oaezziqf.html



    作者:Lewe
    链接:http://www.jianshu.com/p/49112e098c49
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    展开全文
  • jvm 参数设置

    2016-04-07 14:08:50
    JVM 参数 开发阶段最常见的配置,避免默认参数值太小引起的错误问题。由于 JDK8 去掉了持久代,所以无需再设置 PermSize 和 MaxPermSize,否则会出现无法启 动 jvm 的错误 -Xms512M -Xmx1G -Xmn256M -Xss256K -XX:...
    JVM 参数
    开发阶段最常见的配置,避免默认参数值太小引起的错误问题。由于 JDK8
    去掉了持久代,所以无需再设置 PermSize 和 MaxPermSize,否则会出现无法启
    动 jvm 的错误
    -Xms512M -Xmx1G -Xmn256M -Xss256K -XX:PermSize=128M
    -XX:MaxPermSize=128M
    23
     -Xms:初始堆大小,默认值是物理内存的 1/64
     -Xmx:最大堆大小,物理内存的 1/4
     -Xmn:年轻代大小
     -Xss:每个线程的堆栈大小
     -XX:PermSize( JDK8 去除):设置持久代(perm gen)初始值,默认值是物理
    内存的 1/64
     -XX:MaxPermSize( JDK8 去除):设置持久代最大值,物理内存的 1/4

     单位值:可以是 M( MB)或者 G( GB)


    -server -Xms512M -Xmx1G -Xmn256M -Xss256K -XX:PermSize=128M -XX:+PrintGCDetails


    -d64 -server -Xms512M -Xmx1G -Xmn256M -Xss256K -XX:PermSize=128M -XX:+PrintGCDetails

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,219
精华内容 2,887
关键字:

jvm参数设置