-
2021-06-27 16:47:05
示例配置
-server
-Xmx4g
-Xms4g
-Xss256k
-XX:MaxDirectMemorySize=256m
heap ByteBuffer -> -XX:Xmx -> 一种是heap ByteBuffer,该类对象分配在JVM的堆内存里面,直接由Java虚拟机负责垃圾回收。
direct ByteBuffer -> -XX:MaxDirectMemorySize -> 一种是direct ByteBuffer是通过jni在虚拟机外内存中分配的。通过jmap无法查看该快内存的使用情况。只能通过top来看它的内存使用情况。
-XX:+UseG1GC
-XX:+UseCompressedOops
new一个空对象在32为系统中占用内存大小是8byte(对象头,在堆中)+4byte(对象的引用地址,在栈中)=12byte;
new一个空对象在64为系统中占用内存大小是16byte(对象头,在堆中)+8byte(对象的引用地址,在栈中)=24byte;
可想而知同一个对象在64位系统中占的内存加大一半了,不仅消耗运行内存,而且GC回收时挺耗cpu的。
jvm的属性-XX:+UseCompressedOops在JDK 1.6和之后的版本都默认开启了,所以jvm开启了压缩之后64为系统的对象也只占用12byte。
-XX:+UseCompressedClassPointers
由于UseCompressedClassPointers的开启是依赖于UseCompressedOops的开启,因此,要使UseCompressedClassPointers起作用,得先开启UseCompressedOops,并且开启UseCompressedOops 也默认强制开启UseCompressedClassPointers,关闭UseCompressedOops 默认关闭UseCompressedClassPointers。
如果开启类指针压缩,+UseCompressedClassPointers,根据上面的条件,结果跟只开启UseCompressedOops一样,会在内存中消耗20个字节,o指针占4个字节,Object对象占16个字节。
-XX:+SegmentedCodeCache
通过 SegmentedCodeCache参数可以选择按照整体初始化,还是分段初始化。
通过 -XX:ReservedCodeCacheSize参数可以指定Code Cache的初始化大小,这个默认值在不同的JDK版本也不同,目前我这边调试的是OpenJDK11,默认大小是240M,这个已经够用了。
-verbose:gc
包含在-XX:+PrintGCDetails中,用于打印GC详情
-XX:+PrintCommandLineFlags
打印JVM所有参数
-XX:+ExplicitGCInvokesConcurrent
这个参数会在system.gc()的时候使用CMS垃圾回收器,降低gc耗时
-Djava.security.egd=file:/dev/./urandom
SecureRandom在java各种组件中使用广泛,可以可靠的产生随机数。但在大量产生随机数的场景下,性能会较低。这时可以使用"-Djava.security.egd=file:/dev/./urandom"加快随机数产生过程。
參考鏈接:
https://blog.51cto.com/leo01/1795447
-Xlog:gc*,safepoint:/data/log/${SERVICE_NAME}/gc.log:time,uptime:filecount=100,filesize=50M
更多相关内容 -
JVM 参数配置详细介绍
2020-08-31 10:21:03主要介绍了JVM 参数配置详细介绍的相关资料,需要的朋友可以参考下 -
jvm参数配置
2021-11-17 16:32:04jvm参数配置: 首先要了解可以配置些什么参数!!! 1、垃圾收集器 什么是垃圾收集器? 垃圾收集器是垃圾回收算法(引用计数法、标记清楚法、标记整理法、复制算法)的具体实现,不同垃圾收集器、不同版本的JVM所...参考:https://blog.csdn.net/weixin_43122090/article/details/105093777
jvm参数配置:
首先要了解可以配置些什么参数!!!
1、垃圾收集器
什么是垃圾收集器?
垃圾收集器是垃圾回收算法(引用计数法、标记清楚法、标记整理法、复制算法)的具体实现,不同垃圾收集器、不同版本的JVM所提供的垃圾收集器可能会有很在差别。以JDK8为准:
图中展示了7种不同分代的收集器:
Serial、ParNew、Parallel Scavenge、CMS、Serial Old、Parallel Old、G1而它们所处区域,则表明其是属于新生代还是老年代的收集器:
新生代收集器:Serial、ParNew、Parallel Scavenge
老年代收集器:CMS、Serial Old、Parallel Old
整堆收集器:G1
两个收集器间有连线,表明它们可以搭配使用:
Serial / Serial Old Serial / CMS ParNew / Serial Old ParNew / CMS Parallel Scavenge / Serial Old Parallel Scavenge / Parallel Old G1
Serial
Serial 收集器:新生代。发展历史最悠久的收集器。它是一个单线程收集器,它只会使用一个 CPU 或者线程去完成垃圾收集工作,而且在它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。
特点:1、新生代收集器,使用复制算法收集新生代垃圾。
2、单线程的收集器,GC工作时,其它所有线程都将停止工作。
3、简单高效,适合单 CPU 环境。单线程没有线程交互的开销,因此拥有最高的单线程收集效率。使用方式:
//如何设置JVM参数底下会讲解:这里只是列举一部分参数: 设置垃圾收集器:"-XX:+UseSerialGC" --添加该参数来显式的使用改垃圾收集器;
ParNew
ParNew 收集器:新生代。Serial 的多线程版本,即同时启动多个线程去进行垃圾收集。
特点:1、新生代收集器。ParNew垃圾收集器是Serial收集器的多线程版本,采用复制算法。
2、除了多线程外,其余的行为、特点和Serial收集器一样。
3、只有它能与 CMS 收集器配合使用。
4、但在单个CPU环境中,不比Serail收集器好,多线程使用它比较好。
使用方式://如何设置JVM参数底下会讲解:这里只是列举一部分参数: 设置垃圾收集器:"-XX:+UseParNewGC" --强制指定使用ParNew; 设置垃圾收集器: "-XX:+UseConcMarkSweepGC" --指定使用CMS后,会默认使用ParNew作为新生代收集器; 设置垃圾收集器参数:"-XX:ParallelGCThreads" --指定垃圾收集的线程数量,ParNew默认开启的收集线程与CPU的数量相同;
Parallel Scavenge
Parallel Scavenge 收集器:新生代。和 ParNew 的关注点不一样,该收集器更关注吞吐量,尽快地完成计算任务。
特点:1、新生代收集器。
2、采用复制算法。
3、多线程收集。
与ParNew 不同的是:高吞吐量为目标,(减少垃圾收集时间,让用户代码获得更长的运行时间)
使用方式://如何设置JVM参数底下会讲解:这里只是列举一部分参数: 设置垃圾收集器:"-XX:+UseParallelGC" --添加该参数来显式的使用改垃圾收集器; 设置垃圾收集器参数:"-XX:MaxGCPauseMillis" --控制垃圾回收时最大的停顿时间(单位ms) 设置垃圾收集器参数:"-XX:GCTimeRatio" --控制程序运行的吞吐量大小吞吐量大小=代码执行时间/(代码执行时间+gc回收的时间) 设置垃圾收集器参数:"-XX:UseAdaptiveSizePolicy" --内存调优交给虚拟机管理
Serial Old
Serial Old 收集器:Serial 的老年代版本,使用标记 - 整理算法。
特点:1、老年代收集器, 采用"标记-整理"算法。
2、单线程收集。
使用方式://如何设置JVM参数底下会讲解:这里只是列举一部分参数: 在JDK1.5及之前,与Parallel Scavenge收集器搭配使用, 在JDK1.6后有Parallel Old收集器可搭配。 现在的作为CMS收集器的后备预案,在并发收集发生Concurrent Mode Failure时使用
Parallnel old
Parallnel old 收集器,多线程:Parallel 的老年代版本,使用标记 - 整理算法。
特点:1、针对老年代。
2、采用"标记-整理"算法。
3、多线程收集。
4、但在单个CPU环境中,不比Serial Old收集器好,多线程使用它比较好。
使用方式://如何设置JVM参数底下会讲解:这里只是列举一部分参数: 设置垃圾收集器:"-XX:+UseParallelOldGC":指定使用Parallel Old收集器;
CMS
CMS 收集器:老年代。是一种以获取最短回收停顿时间为目标的收集器,适用于互联网站或者 B/S 系统的服务端上。
特点:1、针对老年代,采用标记-清楚法清除垃圾;
2、基于"标记-清除"算法(不进行压缩操作,产生内存碎片);
3、以获取最短回收停顿时间为目标;
4、并发收集、低停顿;
5、CMS收集器有3个明显的缺点:1.对CPU资源非常敏感、2.无法处理浮动垃圾,可能出现"Concurrent Mode Failure"失败、3.产生大量内存碎片
垃圾收集线程与用户线程(基本上)可以同时工作
使用方式://如何设置JVM参数底下会讲解:这里只是列举一部分参数: 设置垃圾收集器:"-XX:+UseConcMarkSweepGC":指定使用CMS收集器;
G1
G1 收集器:分代收集器。当今收集器技术发展最前沿成果之一,是一款面向服务端应用的垃圾收集器。G1可以说是CMS的终极改进版,解决了CMS内存碎片、更多的内存空间登问题。虽然流程与CMS比较相似,但底层的原理已是完全不同。
特点:1、能充分利用多CPU、多核环境下的硬件优势;
2、可以并行来缩短(Stop The World)停顿时间;
3、也可以并发让垃圾收集与用户程序同时进行;
4、分代收集,收集范围包括新生代和老年代
5、能独立管理整个GC堆(新生代和老年代),而不需要与其他收集器搭配;
6、能够采用不同方式处理不同时期的对象;
7、应用场景可以面向服务端应用,针对具有大内存、多处理器的机器;
8、采用标记-整理 + 复制算法来回收垃圾
使用方式://如何设置JVM参数底下会讲解:这里只是列举一部分参数: 设置垃圾收集器:"-XX:+UseG1GC":指定使用G1收集器; 设置垃圾收集器参数:"-XX:InitiatingHeapOccupancyPercent":当整个Java堆的占用率达到参数值时,开始并发标记阶段;默认为45; 设置垃圾收集器参数:"-XX:MaxGCPauseMillis":为G1设置暂停时间目标,默认值为200毫秒; 设置垃圾收集器参数:"-XX:G1HeapRegionSize":设置每个Region大小,范围1MB到32MB;目标是在最小Java堆时可以拥有约2048个Region
JVM参数配置
JVM内存参数简述
#常用的设置 -Xms:初始堆大小,JVM 启动的时候,给定堆空间大小。 -Xmx:最大堆大小,JVM 运行过程中,如果初始堆空间不足的时候,最大可以扩展到多少。 -Xmn:设置堆中年轻代大小。整个堆大小=年轻代大小+年老代大小+持久代大小。 -XX:NewSize=n 设置年轻代初始化大小大小 -XX:MaxNewSize=n 设置年轻代最大值 -XX:NewRatio=n 设置年轻代和年老代的比值。如: -XX:NewRatio=3,表示年轻代与年老代比值为 1:3,年轻代占整个年轻代+年老代和的 1/4 -XX:SurvivorRatio=n 年轻代中 Eden 区与两个 Survivor 区的比值。注意 Survivor 区有两个。8表示两个Survivor :eden=2:8 ,即一个Survivor占年轻代的1/10,默认就为8 -Xss:设置每个线程的堆栈大小。JDK5后每个线程 Java 栈大小为 1M,以前每个线程堆栈大小为 256K。 -XX:ThreadStackSize=n 线程堆栈大小 -XX:PermSize=n 设置持久代初始值 -XX:MaxPermSize=n 设置持久代大小 -XX:MaxTenuringThreshold=n 设置年轻带垃圾对象最大年龄。如果设置为 0 的话,则年轻代对象不经过 Survivor 区,直接进入年老代。 #下面是一些不常用的 -XX:LargePageSizeInBytes=n 设置堆内存的内存页大小 -XX:+UseFastAccessorMethods 优化原始类型的getter方法性能 -XX:+DisableExplicitGC 禁止在运行期显式地调用System.gc(),默认启用 -XX:+AggressiveOpts 是否启用JVM开发团队最新的调优成果。例如编译优化,偏向锁,并行年老代收集等,jdk6纸之后默认启动 -XX:+UseBiasedLocking 是否启用偏向锁,JDK6默认启用 -Xnoclassgc 是否禁用垃圾回收 -XX:+UseThreadPriorities 使用本地线程的优先级,默认启用 等等等......
JVM的GC收集器设置
-XX:+UseSerialGC:设置串行收集器,年轻带收集器 -XX:+UseParNewGC:设置年轻代为并行收集。可与 CMS 收集同时使用。JDK5.0 以上,JVM 会根据系统配置自行设置,所以无需再设置此值。 -XX:+UseParallelGC:设置并行收集器,目标是目标是达到可控制的吞吐量 -XX:+UseParallelOldGC:设置并行年老代收集器,JDK6.0 支持对年老代并行收集。 -XX:+UseConcMarkSweepGC:设置年老代并发收集器 -XX:+UseG1GC:设置 G1 收集器,JDK1.9默认垃圾收集器
JVM参数在哪设置
6.3.1 IDEA在哪里设置JVM参数
1、单个项目的应用
全局的配置找到IDEA安装目录中的bin目录
找到idea.exe.vmoptions文件
打开该文件编辑并保存。
Eclipse在哪里设置JVM参数
1、配置单个项目点击绿色图标右边的小箭头
2、配置全局JVM参数
修改Eclipse的配置文件,在eclipse安装目录下的:eclipse.ini文件
war(Tomcat)包在哪里设置JVM参数
war肯定是部署在Tomcat上的,那就是修改Tomcat的JVM参数1、在Windows下就是在文件/bin/catalina.bat,
增加如下设置:JAVA_OPTS(JAVA_OPTS,就是用来设置 JVM 相关运行参数的变量)set "JAVA_OPTS=-Xms512M -Xmx1024M ...等等等 JVM参数"
2、Linux要在tomcat 的bin 下的catalina.sh 文件里添加注意:位置要在cygwin=false前 JAVA_OPTS="-Xms512M -Xmx1024M ...等等等 JVM参数"
Jar包在哪里设置JVM参数
Jar包简单,一般都是SpringBoot项目打成Jar包来运行
#运行时java -jar是直接插入JVM命令就好了 java -Xms1024m -Xmx1024m ...等等等 JVM参数 -jar springboot_app.jar &
调优总结
在实际工作中,我们可以直接将初始的堆大小与最大堆大小相等,
这样的好处是可以减少程序运行时垃圾回收次数,从而提高效率。
初始堆值和最大堆内存内存越大,吞吐量就越高,
但是也要根据自己电脑(服务器)的实际内存来比较。
最好使用并行收集器,因为并行收集器速度比串行吞吐量高,速度快。
当然,服务器一定要是多线程的
设置堆内存新生代的比例和老年代的比例最好为1:2或者1:3。
默认的就是1:2
减少GC对老年代的回收。设置生代带垃圾对象最大年龄,进量不要有大量连续内存空间的java对象,因为会直接到老年代,内存不够就会执行GC
注释:其实最主要的还是服务器要好,你硬件都跟不上,软件再好都没用
注释:老年代GC很慢,新生代没啥事
注释:默认的JVM堆大小好像是电脑实际内存的四分之一左右, -
JVM参数配置详解
2018-11-29 00:00:34-Xms为JVM启动时申请的最小内存,默认为操作系统物理内存的1/64但小于1G,-Xmx为JVM可申请的最大内存,默认为物理内存的1/4但小于1G,默认当空余堆内存小于40%时,JVM会增大Heap到-Xmx指定的大小,可通过-XX:...默认设置
-Xms
为JVM启动时申请的最小内存,默认为操作系统物理内存的1/64但小于1G
-Xmx
为JVM可申请的最大内存,默认为物理内存的1/4但小于1G,默认当空余堆内存小于40%时,JVM会增大Heap到-Xmx
指定的大小,可通过-XX:MinHeapFreeRation
来指定这个比列;当空余堆内存大于70%时,JVM会减小heap的大小到-Xms
指定的大小,可通过XX:MaxHeapFreeRation
来指定这个比列。堆大小设置
JVM 中最大堆大小有三方面限制:
- 相关操作系统的数据模型(32-bt还是64-bit)限制
- 系统的可用虚拟内存限制
- 系统的可用物理内存限制
32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。
典型设置(8G内存)
java -Xmx3500m -Xms3500m -Xmn2g -Xss128k
-Xmx3500m
设置JVM最大可用内存为3550M。
-Xms3500m
设置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区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。内存溢出问题(HeapDumpOnOutOfMemoryError)
java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/jvm/app -XX:ErrorFile=/var/log/jvm/app/java_error_%p.log
回收器选择
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
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数。并行收集线程数。 -
Tomcat8 JVM参数配置
2019-12-13 18:34:05一、Windows下设置Tomcat JVM参数 1、未安装成Windows服务的情况(双击bin目录中的startup.bat启动Tomcat,会出现命令窗口): 参数修改步骤: 2、安装成Windows服务的情况(在Windows服务列表中启动Tomcat,不会...目录
1、未安装成Windows服务的情况(双击bin目录中的startup.bat启动Tomcat,会出现命令窗口):
2、安装成Windows服务的情况(在Windows服务列表中启动Tomcat,不会出现命令窗口):
配置环境说明:
JDK版本:1.8.0_172 x64位
Tomcat 版本:apache-tomcat-8.0.15 x64位解压版
操作系统:Windows/Linux
一、Windows下设置Tomcat JVM参数
1、未安装成Windows服务的情况(双击bin目录中的startup.bat启动Tomcat,会出现命令窗口):
参数修改步骤:
①修改{tomcat_home}\bin目录下的catalina.bat文件,在setlocal这行代码前面加入如下两行配置信息:
set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding="UTF-8" -Dsun.jnu.encoding="UTF8" -Ddefault.client.encoding="UTF-8" -Duser.language=Zh set JAVA_OPTS=%JAVA_OPTS% -server -Xms8192m -Xmx8192m -Xmn4096m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC
新增配置参数的第二行配置可以根据服务器的实际内存进行调整,建议参数如下:
rem 如果服务器只运行一个 Tomcat rem 服务器内存如果是 4G 第二行设置为: set JAVA_OPTS=%JAVA_OPTS% -server -Xms2048m -Xmx2048m -Xmn1024m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC rem 服务器内存如果是 8G 第二行设置为: set JAVA_OPTS=%JAVA_OPTS% -server -Xms4096m -Xmx4096m -Xmn2048m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC rem 服务器内存如果是 16G 第二行设置为: set JAVA_OPTS=%JAVA_OPTS% -server -Xms8192m -Xmx8192m -Xmn4096m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC rem 服务器内存如果是 32G 第二行设置为: set JAVA_OPTS=%JAVA_OPTS% -server -Xms16384m -Xmx16384m -Xmn8192m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC
②双击{tomcat_home}\bin目录下的startup.bat文件,启动tomcat,查看tomcat启动后命令窗口中的日志,通过日志中打印的jvm参数可以看出配置是否生效。
注意:这种配置方式只有双击startup.bat文件启动tomcat服务时才会生效,安装成windows服务方式启动的tomcat这种配置不会会生效。
2、安装成Windows服务的情况(在Windows服务列表中启动Tomcat,不会出现命令窗口):参数修改步骤:
①运行(快捷键win+R)输入regedit,打开注册表
②找到目录Apache Software Foundation\Procrun 2.0\Tomcat\Parameters\Java
注册表中apache的具体路径说明
32位机器的路径是:HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation
64位机器的路径是:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation③修改JvmMs的参数(Jvm中Xms的大小)
④修改JvmMx的参数(Jvm中Xmx的大小)
⑤修改Options的配置
增加的三行配置:
-XX:PermSize=256M -XX:MaxPermSize=1024m -XX:ReservedCodeCacheSize=48m
注意:步骤③④⑤中的配置可以根据服务器的内存自行调整,具体数值可以参照第一种情况的建议参数进行配置
二、Linux下设置Tomcat JVM参数
在对应linux下的tomcat版本中,修改 catalina.sh
# vi /usr/tomcat/bin/catalina.sh
注:/usr/tomcat/bin/catalina.sh 是 tomcat所在目录的bin目录 (linux环境下)
找到 # OS specific support. $var _must_ be set to either true or false.(大概在113行)
在上句之前加入:
# CATALINA_OPTS CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms8192m -Xmx8192m -Xmn4096m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC"
根据服务器的内存设置相应的JVM参数大小,建议配置如下:
# 如果服务器只运行一个 Tomcat # 服务器内存如果是 4G: CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms2048m -Xmx2048m -Xmn1024m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC" # 服务器内存如果是 8G: CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms4096m -Xmx4096m -Xmn2048m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC" # 服务器内存如果是 16G: CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms8192m -Xmx8192m -Xmn4096m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC" # 服务器内存如果是 32G: CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms16384m -Xmx16384m -Xmn8192m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC"
-
Java虚拟机JVM参数配置说明.pdf
2022-07-14 17:25:59Java虚拟机JVM参数配置说明.pdf -
JAVA进程的JVM参数配置如下
2020-10-30 20:44:22JAVA进程的JVM参数配置 -Xms1G -Xmx2G -Xmn500M -XX:MaxPermSize=64M -XX:+UseConcMarkSweepGC -XX:SurvivorRatio=3, 请问eden区最终分配的大小是多少? Xms是起始内存 Xmx是最大内存 Xmn是新生代内存 Xss 栈大小。 ... -
java -jar 启动项目 jvm参数配置
2020-12-24 16:18:53java -jar 启动项目 jvm参数配置 java -jar xxx.jar -Xmx512m 这种情况虽然不会报错,但是jvm参数没有起作用。 正确的方式为 java -Xmx512m -jar xxx.jar 如果要加入spring的参数应该追加在xxx.jar后面 java -... -
生产环境jvm参数配置
2019-03-01 17:53:11java 应用程序部署在服务器上,应该具备一些基本的参数。下面分jdk1.8之前,以及 1.8之后分别列出来。以供以后参考 -server -Xms<heap size>[g|m|k] -Xmx<heap size>[g|m|k] -XX:... -
查看Java JVM参数配置信息命令
2019-01-03 18:37:00查看Java JVM参数配置信息命令 查看Java JVM参数配置信息命令 java -XX:+PrintCommandLineFlags jvm运行时状态的参数,可以很快找出问题所在。现在把几个命令记录一下:1. jstat这个命令对于查看... -
线上机器JVM参数配置
2017-12-05 15:24:04记录一下线上机器的JVM参数配置: CATALINA_OPTS="$CATALINA_OPTS -server -Djava.awt.headless=true 6.7补充:之前贴的是web机器的JVM参数配置,看了service的参数配置,稍稍有点不同 web配了新生代1G,... -
【基础+实战】JVM原理及优化系列之八:如何查看JVM参数配置?
2018-09-26 10:08:47在$JAVA_HOME/jre/bin下有client和server两个目录,分别代表JVM的两种运行模式。 client运行模式,针对桌面应用,加载速度比server模式快10%,而运行速度为server模式的10分之一。client下默认的堆容量 -Xms1M ... -
性能较好的web服务器jvm参数配置
2017-08-15 16:23:22G1垃圾收集器(-XX:+UseG1GC) G1(Garbage First):垃圾收集器是在Java 7后才可以使用的特性,它的长远目标时代替CMS收集器。...一个性能较好的web服务器jvm参数配置: -server//服务器模式 -Xmx -
tomcat jvm参数配置
2011-12-09 14:05:38详述tomcat服务端配置,使并发更加流畅 -
JVM:JVM常见参数配置
2022-02-27 10:50:11JVM常见参数配置 JVM的参数类型: 1、标配参数:-version,-help,-showversion 2、x参数(了解):-Xint:解释执行;-Xcomp:第一次使用就编译成本地代码;-Xmixed:混合模式; 3、xx参数: (1)Boolean类型: ... -
spark jvm参数配置
2017-09-22 16:36:101.Driver端的JVM参数: 对于-Xmx,-Xms , yarn-client模式,则默认读取spark-env文件中的SPARK_DRIVER_MEMORY参数值; yarn-cluster模式,则默认读取的是spark-default.conf文件中的spark.driver.extraJavaOptions... -
看这里!jvm参数配置springboot
2021-05-27 20:48:45SpringBoot(SpringBoot+SpringBoot商品管理系统实战) 1~3年: JVM深度进阶(JVM内存区域+JVM运行时内存+垃圾回收与算法+JAVA 四种引用类型+GC分代收集算法 VS 分区收集算法+GC垃圾收集器等) 并发编程深度进阶... -
JVM服务器参数配置样例
2022-01-03 23:31:01JVM服务器参数配置样例 -
JVM参数配置详解(包含JDK1.8)
2017-12-25 10:58:13JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server... -
简单实用JVM参数配置
2013-06-09 17:00:19JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、... -
正确配置JVM参数-附JVM参数详解
2020-05-19 21:28:00JVM参数类型 标准参数(-) 所有的JVM实现都必须实现这些参数的功能,而且向后兼容。 非标准参数(-X) 默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容。 非Stable参数(-XX) 此类... -
几个重要的jvm参数配置及建议
2015-09-22 10:52:51jvm配置参数比较多,只有当经常使用时,才能在脑中不忘。而在现在的工作生活中,大家可能经常跟这些参数打交道的时间还是少之又少,只有当线上的服务出问题是,才会去 熟悉。这些是自己工作中调试用到的几个重要的... -
JVM参数配置总结
2016-11-09 11:55:51JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。在Windows Server ... -
JVM启动参数配置详解
2021-04-22 16:56:40java基础 JVM启动参数配置JDK8的JVM启动参数默认配置如下:JDK8的JVM启动参数说明如下: JDK8的JVM启动参数默认配置如下: -Xms2g -Xmx2g (按不同容器,4G及以下建议为50%,6G以上,建议设置为70%) -XX:Metaspace... -
IDEA配置JVM参数
2022-04-20 07:51:50IDEA配置JVM参数 最近在学习JVM的调参调优,idea这个工具也是最近才开始用的,不太熟悉。但是,古话说得好,自己动手,丰衣足食。于是乎,度娘了一番,成功实现效果。接下来讲一下操作步骤(其实很简单的) 1.找到... -
JVM实战:JVM常用参数配置
2021-02-27 16:52:10本篇主要了解下面内容:1、JVM常用的配置参数如、内存配置参数、GC策略配置参数、日志配置参数、异常信息参数。2、CMS、G1的常用个性化参数。3、常用的一些应用启动参数,在项目启动的时候我们需要配置哪些参数。4、... -
线上服务的JVM参数配置
2016-12-28 17:45:22JVM默认推荐配置: 前端机器: -Xmx2048m -Xms2048m -XX:MaxPermSize=256m -XX:PermSize=128m -XX:NewRatio=3 -XX:ParallelCMSThreads=4 -XX:+CMSClassUnloadingEnabled -XX:+DisableExplicitGC -XX:+... -
tomcat配置jvm参数
2022-03-29 10:49:16配置jvm参数位置不同,所需要的启动方式也不同 tomcat版本8.5 1、windows环境 几种方法之间可能会有重复、还没起细研究 方法一、通过bin目录下的tomcat8.exe启动 直接在java options中添加jvm参数以key=value的形式...