常用JVM 启动参数解析

截取了生产服务器上的JVM启动参数,都是前人踩过无数坑总结出的精华。这里逐个介绍下

-server ①
-Xms512m ②
-Xmx1024m ③
-XX:PermSize=256m ④
-XX:MaxPermSize=512m ⑤

-XX:SurvivorRatio=6 ⑥
-XX:+DisableExplicitGC ⑦
-XX:MaxTenuringThreshold=5 ⑧
-XX:+UseConcMarkSweepGC ⑨
-XX:+UseParNewGC ⑩
-XX:+UseCMSCompactAtFullCollection ⑪
-XX:CMSFullGCsBeforeCompaction=5 ⑫
-XX:+UseCMSInitiatingOccupancyOnly ⑬
-XX:CMSInitiatingOccupancyFraction=70 ⑭
-XX:+PrintGC ⑮
-XX:+PrintGCDetails ⑯
-XX:+PrintGCDateStamps ⑰
-Xloggc:/tt/ttadmin/servers/axe_52500/logs/gc.log ⑱

-XX:+HeapDumpOnOutOfMemoryError ⑲
-XX:HeapDumpPath=/tt/ttadmin/servers/axe_52500/logs ⑳

-Dorg.apache.catalina.SESSION_COOKIE_NAME=axe_52500SESSIONID ㉑
-Djava.endorsed.dirs=/tt/ttadmin/webserver/tomcat/endorsed ㉒
-Dcatalina.base=/tt/ttadmin/servers/axe_52500 ㉓
-Dcatalina.home=/tt/ttadmin/webserver/tomcat ㉔

-Dfile.encoding=UTF-8 ㉕
-Doracle.jdbc.V8Compatible=true ㉖
-Djava.security.egd=file:/dev/./urandom ㉗
-Dsun.net.inetaddr.ttl=3 ㉘
-Djava.net.preferIPv4Stack=true ㉙

-Dcom.sun.management.jmxremote ㉚
-Dcom.sun.management.jmxremote.authenticate=false ㉛
-Dcom.sun.management.jmxremote.ssl=false ㉜
-Dcom.sun.management.jmxremote.port=52509 ㉝
-Djava.rmi.server.hostname=192.168.10.70 ㉞

org.apache.catalina.startup.Bootstrap
-config /tt/ttadmin/servers/axe_52500/conf/server.xml

======================================================

JVM实现:JDK6·JDK7:Oracle官方Hotspot

  • JRockit 从JDK7开始并入 Hotspot
  • OpenJDKHotspot 的开源子集,Hotspot 多了少量商业功能(没怎么用到过)
  • 从JDK8开始,PermGen (永久代)被 Metaspace (元空间) 替代

① -server 指定以服务模式启动

启动模式比较clientserver
编译速度快(10?%)
运行速度
默认资源占用
适用场景GUI/脚本执行服务器
32位支持
64位支持×

②-Xms512m 设置 堆内存 最小值/初始值

③-Xmx1024m 设置 堆内存 最大值

④-XX:PermSize=256m 设置 永久代 最小值/初始值

⑤-XX:MaxPermSize=512m 设置 永久代 最大值

  • 如果内存波动比较厉害,建议Xms设置同Xmx,JVM扩大内存会拖慢性能。
  • 永久代一般启动后是比较稳定的, 大量使用动态代理会占用更多永久代内存
  • JDK8开始方法区由元空间替代,相应参数为-XX:MetaspaceSize 和 -XX:MaxMetaspaceSize

⑥-XX:SurvivorRatio=6 设置老年代占堆内存的比例,默认老年代占8,新生代占2。增加新生代占比在较多即生即灭对象时(例如ETL任务),可以减少新生代的GC频率

⑦-XX:+DisableExplicitGC 禁止代码中的System.gc()

⑧-XX:MaxTenuringThreshold=5 设置晋升老年代的最大minor GC次数,默认值=最大值=15 实际晋升条件比较复杂,减小该值只能说一定程度上提高新生代的利用率,可能看不出效果

⑨-XX:+UseConcMarkSweepGC 使用CMS收集器收集老年代,特点是停顿短,停顿少。吞吐量相对低。适合短连接事务型系统

⑩-XX:+UseParNewGC 和上一条配合,年轻代使用并行GC

⑪-XX:+UseCMSCompactAtFullCollection 开启CMS压缩,解决碎片化问题。压缩会增加停顿,但是会减少FullGC频率。

⑫-XX:CMSFullGCsBeforeCompaction=5 CMS每5次Full GC进行一次压缩

⑬-XX:+UseCMSInitiatingOccupancyOnly CMS在一次GC后默认会自己预测计算下次启动GC的占比,据说有时候会导致频繁GC,所以开启后固定为下面的初始比例

⑭-XX:CMSInitiatingOccupancyFraction=70 CMS初始触发GC的占用比例

⑮-XX:+PrintGC 输出GC日志

⑯-XX:+PrintGCDetails 输出GC的详细日志

⑰-XX:+PrintGCDateStamps 输出GC的时间戳

⑱-Xloggc:/tt/ttadmin/servers/axe_52500/logs/gc.log GC文件的输出路径

⑲-XX:+HeapDumpOnOutOfMemoryError 内存溢出时保存当时的内存快照

⑳-XX:HeapDumpPath=/tt/ttadmin/servers/axe_52500/logs 内存溢出时保存当时的内存快照

㉑-Dorg.apache.catalina.SESSION_COOKIE_NAME=axe_52500SESSIONID 设置tomcat session的名字,解决同一域名下多应用session冲突的问题

㉒-Djava.endorsed.dirs=/tt/ttadmin/webserver/tomcat/endorsed 使用定制的实现替换JDK标准实现,主要是替换xml解析器

㉓-Dcatalina.base=/tt/ttadmin/servers/axe_52500 指定tomcat war包路径

㉔-Dcatalina.home=/tt/ttadmin/webserver/tomcat 指定tomcat启动命令路径

㉕-Dfile.encoding=UTF-8 修改JVM默认字符集,涉及到文件IO,class文件内的中文问题等。默认为系统字符编码,中文系统Windows常见为GBK

㉖-Doracle.jdbc.V8Compatible=true 修复oracle10g驱动对日期的处理流失时间问题

㉗-Djava.security.egd=file:/dev/./urandom 默认的随机数生成会阻塞,该配置改为非阻塞。用UUID的同学也会用到

㉘-Dsun.net.inetaddr.ttl=3 设置JVM缓存NDS时间,默认是永远有效,必须重启

㉙-Djava.net.preferIPv4Stack=true 优先使用IPv4地址

㉚-Dcom.sun.management.jmxremote 开始JMX

㉛-Dcom.sun.management.jmxremote.authenticate=false 关闭JMX认证

㉜-Dcom.sun.management.jmxremote.ssl=false 关闭JMX认证

㉝-Dcom.sun.management.jmxremote.port=52509 设置JMX端口

㉞-Djava.rmi.server.hostname=192.168.10.70 设置RMI主机名,避免127.0.0.1远程不认识


转载地址: 老司机常用JVM 启动参数解析 - 简书

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程简介: 目前,Java是最为流行的编程语言之一,它的基础平台就是JVM。除了Java,如JRuby、Scala、Clojure等语言也运行在JVM平台。熟悉和掌握JVM平台有着重要的实用价值和意义。 在本课程中个,将详细介绍JVM的基本原理、组成以及工作方式,并配合实际案例,介绍相关的调优技巧。 课程大纲: 第一课 初识JVM JVM分类 Java语言规范 JVM规范 介绍JVM的基本知识和发展历史,并介绍了Java语言规范和JVM规范。 第二课 JVM运行机制简介 堆、栈、方法区等 JVM启动流程 内存模型和volatile实例 解释和编译运行的概念 介绍JVM的内部结构、启动流程以及内存模型。并介绍JVM字节码的执行方式。 第三课 常用JVM参数 堆的分配参数 栈分配及实例讲解 server与client模式 调试跟踪参数 介绍常用JVM参数,包括内存分配、堆栈分配、虚拟机运行模式以及调试跟踪参数。 第四课 GC的算法和种类 引用计数 标记清除 复制算法 标记压缩 可触及性 本章是理论性较强的一章,主要介绍GC的基本算法和思想,本章作为下一章节的前序课程。 第五课 GC控制参数 Serial ParNew等GC参数 GC的参数搭配实例分析 介绍GC的设置参数,并分析相关的案列。 第六课 类装载 class装载流程 ClassLoader模式 ClassLoader的使用实例分析 热替换例子 详细介绍ClassLoader的原理和应用。分析2个案例,说明ClassLoader的使用。 第七课 性能监控工具 线程死锁分析 OOM分析 介绍常用JVM诊断和分析工具,并以死锁和OOM为例,展示这些工具的使用。 第八课 分析Java堆 MAT的使用案例 Jvisualvm介绍使用 介绍了Java堆的分析方法,以一个实例为基础,展示对堆的分析过程。 第九课 锁 baise锁 轻量级锁 自旋锁 介绍JVM中对多线程锁的实现。 第十课 class文件结构 ASM库介绍 介绍JVM规范中的最重要的内容——Class文件结构,同时介绍ASM库的使用以及对class文件的修改。 第十一课 字节码执行 案例以及javap JIT及相关参数 介绍JVM的字节码以及反汇编方法,同时介绍JIT相关的参数和应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值