CMS GC启动参数优化配置
简介:
java启动参数共分为三类;
其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;
其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;
其三是非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;
-XX:+<option> 启用option,例如:-XX:+PrintGCDetails启动打印GC信息的选项,其中+号表示true,开启的意思
-XX:-<option> 不启用option,例如:-XX:-PrintGCDetails关闭启动打印GC信息的选项,其中-号表示false,关闭的意思
-XX:<option>=<number> 设定option的值为数字类型,可跟单位,例如 32k, 1024m, 2g。例如:-XX:MaxPermSize=64m
-XX:<option>=<string> 设定option的值为字符串,例如: -XX:HeapDumpPath="C:\Users\Daxin\Desktop\jvmgcin"
设置:
1.设置环境变量JAVA_OPTS
2.Windows下,在/bin/catalina.bat,Unix下,在/bin/catalina.sh的前面,增加 JAVA_OPTS=’-Xms256m -Xmx512m’
Tomcat 的启动参数位于安装目录 ${TOMCAT_HOME}/bin目录下,Linux 操作系统就是 catalina.sh 文件。JAVA_OPTS,就是用来设置 JVM 相关运行参数的变量,还可以在 CATALINA_OPTS 变量中设置。关于这 2 个变量,还是多少有些区别的:
JAVA_OPTS:用于当 Java 运行时选项“start”、“stop”或“run”命令执行。
CATALINA_OPTS:用于当 Java 运行时选项“start”或“run”命令执行。
为什么有两个不同的变量?它们之间都有什么区别呢?
首先,在启动 Tomcat 时,任何指定变量的传递方式都是相同的,可以传递到执行“start”或“run”命令中,但只有设定在 JAVA_OPTS 变量里的参数被传递到“stop”命令中。对于 Tomcat 运行过程,可能没什么区别,影响的是结束程序,而不是启动程序。
第二个区别是更微妙,其他应用程序也可以使用 JAVA_OPTS 变量,但只有在 Tomcat 中使用 CATALINA_OPTS 变量。如果你设置环境变量为只使用 Tomcat,最好你会建议使用 CATALINA_OPTS 变量,而如果你设置环境变量使用其它的 Java 应用程序,例如 JBoss,你应该把你的设置放在JAVA_OPTS 变量中。
参数:
我在本地配置的:
-server ## 服务器模式
-Xms2g ## 初始化堆内存大小
-Xmx2g ## 堆内存最大值
-Xmn256m ## 年轻代内存大小,整个JVM内存=年轻代 + 年老代 + 持久代
-Xss256k ## 设置每个线程的堆栈大小
-XX:PermSize=256m ## 持久代内存大小
-XX:MaxPermSize=256m ## 最大持久代内存大小
-XX:ReservedCodeCacheSize=256m ## 代码缓存,存储已编译方法生成的本地代码
-XX:+UseCodeCacheFlushing ## 代码缓存满时,让JVM放弃一些编译代码
-XX:+DisableExplicitGC ## 忽略手动调用GC, System.gc()的调用就会变成一个空调用,完全不触发GC
-Xnoclassgc ## 禁用类的垃圾回收,性能会高一点
-XX:+UseConcMarkSweepGC ## 并发标记清除(CMS)收集器
-XX:+CMSParallelRemarkEnabled ## 启用并行标记,降低标记停顿
-XX:+UseParNewGC ## 对年轻代采用多线程并行回收,这样收得快
-XX:+UseCMSCompactAtFullCollection ## 在FULL GC的时候对年老代的压缩,Full GC后会进行内存碎片整理,过程无法并发,空间碎片问题没有了,但提顿时间不得不变长了
-XX:CMSFullGCsBeforeCompaction=3 ## 多少次Full GC 后压缩old generation一次
-XX:LargePageSizeInBytes=128m ## 内存页的大小
-XX:+UseFastAccessorMethods ## 原始类型的快速优化
-XX:+UseCMSInitiatingOccupancyOnly ## 使用设定的回收阈值(下面指定的70%)开始CMS收集,如果不指定,JVM仅在第一次使用设定值,后续则自动调整
-XX:CMSInitiatingOccupancyFraction=70 ## 使用cms作为垃圾回收使用70%后开始CMS收集
-XX:SoftRefLRUPolicyMSPerMB=50 ## Soft reference清除频率,默认存活1s,设置为0就是不用就清除
-XX:+AlwaysPreTouch ## 强制操作系统把内存真正分配给JVM
-XX:+PrintClassHistogram ## 按下Ctrl+Break后,打印类的信息
-XX:+PrintGCDetails ## 输出GC详细日志
-XX:+PrintGCTimeStamps ## 输出GC的时间戳(以基准时间的形式)
-XX:+PrintHeapAtGC ## 在进行GC的前后打印出堆的信息
-XX:+PrintGCApplicationConcurrentTime ## 输出GC之间运行了多少时间
-XX:+PrintTenuringDistribution ## 参数观察各个Age的对象总大小
-XX:+PrintGCApplicationStoppedTime ## GC造成应用暂停的时间
-Xloggc:../log/gc.log ## 指定GC日志文件的输出路径
-ea ## 打开断言机制,jvm默认关闭
-Dsun.io.useCanonCaches=false ## java_home没有配置,或配置错误会报异常
-Dsun.awt.keepWorkingSetOnMinimize=true ## 可以让IDEA最小化到任务栏时依然保持以占有的内存,当你重新回到IDEA,能够被快速显示,而不是由灰白的界面逐渐显现整个界面,加快回复到原界面的速度
-Djava.net.preferIPv4Stack=true ## 让tomcat默认使用IPv4
-Djdk.http.auth.tunneling.disabledSchemes="" ## 等于Basic会禁止proxy使用用户名密码这种鉴权方式,反之空就可以使用
-Djsse.enablesSNIExtension=false ## SNI支持,默认开启,开启会造成ssl握手警告
-XX:+HeapDumpOnOutOfMemoryError ## 表示当JVM发生OOM时,自动生成DUMP文件
-XX:HeapDumpPath=D:/data/log ## 表示生成DUMP文件的路径,也可以指定文件名称,如果不指定文件名,默认为:java_<pid>_<date>_<time>_heapDump.hprof。
-XX:-OmitStackTraceInFastThrow ## 省略异常栈信息从而快速抛出,这个配置抛出这个异常非常快,不用额外分配内存,也不用爬栈,但是出问题看不到stack trace,不利于排查问题
-Dfile.encoding=UTF-8
-Duser.name=qhong
其他暂时没用到的:
NewRatio:3 ## 新生代与年老代的比例。比如为3,则新生代占堆的1/4,年老代占3/4。
SurvivorRatio:8 ## 新生代中调整eden区与survivor区的比例,默认为8,即eden区为80%的大小,两个survivor分别为10%的大小。
PretenureSizeThreshold:10m ## 晋升年老代的对象大小。默认为0,比如设为10M,则超过10M的对象将不在eden区分配,而直接进入年老代。
MaxTenuringThreshold:15 ## 晋升老年代的最大年龄。默认为15,比如设为10,则对象在10次普通GC后将会被放入年老代。
-XX:MaxTenuringThreshold=0 ## 垃圾最大年龄,如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代,该参数只有在串行GC时才有效
-XX:+HeapDumpBeforeFullGC ## 当JVM 执行 FullGC 前执行 dump
-XX:+HeapDumpAfterFullGC ## 当JVM 执行 FullGC 后执行 dump
-XX:+HeapDumpOnCtrlBreak ## 交互式获取dump。在控制台按下快捷键Ctrl + Break时,JVM就会转存一下堆快照
-XX:+PrintGC ## 输出GC日志
-verbose:gc ## 同PrintGC,输出GC日志
-XX:+PrintGCDateStamps ## 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
-XX:+PrintFlagsInitial ## 显示所有可设置参数及默认值
-enablesystemassertions ## 激活系统类的断言
-esa ## 同上
-disablesystemassertions ## 关闭系统类的断言
-dsa ## 同上
-XX:+ScavengeBeforeFullGC ## FullGC前回收年轻代内存,默认开启
-XX:+CMSScavengeBeforeRemark ## CMS remark前回收年轻代内存
-XX:+CMSIncrementalMode ## 采用增量式的标记方式,减少标记时应用停顿时间
-XX:+CMSClassUnloadingEnabled ## 相对于并行收集器,CMS收集器默认不会对永久代进行垃圾回收。如果希望回收,就使用该标志,注意,即使没有设置这个标志,一旦永久代耗尽空间也会尝试进行垃圾回收,但是收集不会是并行的,而再一次进行Full GC
-XX:+CMSConcurrentMTEnabled ## 当该标志被启用时,并发的CMS阶段将以多线程执行(因此,多个GC线程会与所有的应用程序线程并行工作)。该标志已经默认开启,如果顺序执行更好,这取决于所使用的硬件,多线程执行可以通过-XX:-CMSConcurremntMTEnabled禁用。
Xms与Xmx配置相同的值,为了能够在GC后不需要重新分隔计算堆区的大小而浪费资源。
CMS重要参数:
- CMSInitiatingOccupancyFraction:触发CMS收集器的内存比例。比如60%的意思就是说,当内存达到60%,就会开始进行CMS并发收集。
- UseCMSCompactAtFullCollection:这个前面已经提过,用于在每一次CMS收集器清理垃圾后送一次内存整理。
- CMSFullGCsBeforeCompaction:设置在几次CMS垃圾收集后,触发一次内存整理。
参考:
CMS GC启动参数优化配置的更多相关文章
- php配置php-fpm启动参数及配置详解
约定几个目录 /usr/local/php/sbin/php-fpm/usr/local/php/etc/php-fpm.conf/usr/local/php/etc/php.ini一,php-fpm ...
- Fitnesse启动参数与配置
Fitnesse最新版20140630默认启动后,网页风格与 fitnesse.org 的Bootstrap风格完全不一致. 需要配置plugins.properties中的Theme=bootstr ...
- php配置php-fpm启动参数及配置详
php-fpm 启动参数及重要配置详解 约定几个目录 /usr/local/php/sbin/php-fpm/usr/local/php/etc/php-fpm.conf/usr/local/php/ ...
- (转)nginx应用总结(1)--基础认识和应用参数优化配置
在linux系统下使用nginx作为web应用服务,用来提升网站访问速度的经验已五年多了,今天在此对nginx的使用做一简单总结. 一.nginx服务简介Nginx是一个高性能的HTTP和反向代理服务 ...
- CentOS下内核TCP参数优化配置详解
主动关闭的一方在发送最后一个ACK后就会进入TIME_WAIT状态,并停留2MSL(Max Segment LifeTime)时间,这个是TCP/IP必不可少的. TCP/IP的设计者如此设计,主要原 ...
- Chrome启动参数的配置问题的补充
一.当Chrome浏览器不支持本地AJAX请求时,会出现AJAX跨域问题,这时候我们就要配置相应的启动参数使得浏览器可以访问本地文件: 配置参数为:--allow-file-access-from-f ...
- JVM组成、GC回收机制、算法、JVM常见启动参数、JAVA出现OOM,如何解决、tomcat优化方法
JVM组成.GC回收机制.算法.JVM常见启动参数.JAVA出现OOM,如何解决.tomcat优化方法
- eclipse.ini配置eclipse的启动参数
Eclipse的启动由$ECLIPSE_HOME/eclipse.ini控制,如果$ECLIPSE_HOME 没有被定义,则Eclipse安装目录下的默认eclipse.ini会生效. eclipse ...
- IntellIJ IDEA 启动 参数 配置
系统环境: 型号名称: MacBook Pro型号标识符: MacBookPro11,4处理器名称: Intel Core i7处理器速度: 2.8 GHz处理器数目: 1核总数: 4L2 缓存(每个 ...
随机推荐
- cf 938E
哇自闭了. 一样个毛啊. 和之前见过的几道感觉很类似啊. 首先一个数如果有贡献那么在他后面一定有一个大于它的数,并且前面的全比他小,然后我就跑偏了... 于是我们先排个序,显然无影响,我们可以考虑从 ...
- pdf转html插件~~~pdf2htmlEX安装,配置及使用
这是一个将pdf转化为html的服务,开源的. 此功能服务的代码在git上的地址为: https://github.com/coolwanglu/pdf2htmlEX/wiki 安装: 在ubuntu ...
- POJ 1426 - Find The Multiple - [DP][BFS]
题目链接:http://poj.org/problem?id=1426 Given a positive integer n, write a program to find out a nonzer ...
- Luogu 1086 - 花生采摘 - [简单模拟]
题目链接:https://www.luogu.org/problemnew/show/P1086 题目描述鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着 ...
- 关于springMVC的日志管理
主要是基于在spring aop特性. 1. 创建一个系统日志的操作类,类里面提供一个方法,可以向数据库或者表中写入:访问用户名,访问IP,操作时间,访问包名,具体函数名. /** * @Name S ...
- [daily] 比端口转发更高级的ssh device tunnel转发
没有什么能够阻挡,你对自由的向往. 场景: 我有一台设备Server100,在某一个f复杂的内网里,需要多次ssh跳转可以访问到.但是它不能直接访问internet. 我现在需要在我的ssh路径上,搭 ...
- [设计语言][统一建模语言][软件开发方法学][UML] UML
背景介绍 UML是一种统计建模语言. WIKI: https://en.wikipedia.org/wiki/Unified_Modeling_Language UML是OMG (object man ...
- LeetCode 696 Count Binary Substrings 解题报告
题目要求 Give a string s, count the number of non-empty (contiguous) substrings that have the same numbe ...
- :after和:before 伪类
1 使用伪类画三角形 .div{ margin-top: 100px; margin-left: 100px; } .div:after{ content: ''; display:inline-bl ...
- PTA 复数四则运算
本题要求编写程序,计算2个复数的和.差.积.商. 输入格式: 输入在一行中按照a1 b1 a2 b2的格式给出2个复数C1=a1+b1i和C2=a2+b2i的实部和虚部.题目保证C2不为0. 输出格式 ...