前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >JVM Advanced Runtime Options

JVM Advanced Runtime Options

作者头像
邹志全
发布于 2020-02-25 08:28:24
发布于 2020-02-25 08:28:24
9920
举报
文章被收录于专栏:EffectiveCodingEffectiveCoding

高级运行时选项(Advanced Runtime Options): -XX:+UnlockCommercialFeatures 开启商业选项,许多商业特性都需要这个选项的支持。 -XX:+CheckEndorsedAndExtDirs jdk 8中新增加的一个参数,有兴趣的可以去看看openjdk中的关于这一块的实现(http://hg.openjdk.java.net/jdk8u/hs-dev/hotspot/rev/fa6adc194d48) 这个参数是用来阻止Java 命令运行应用(除非没有用到endorsed-standards override机制&扩展机制)。 同时,这个选项会检查应用是否启动了以下机制 1、java.ext.dirs 或 java.endorsed.dirs 属性被设置 2、lib/endorsed 目录存在 && 不为空 3、lib/ext 目录下包含了除JDK以外的JAR 4、系统范围内 特定于平台的扩展目录中包含任何JAR文件 -XX:+DisableAttachMechanism 启动此参数之后,JVM将禁止任何工具连接,通常情况下这个选项是关闭的。外部工具指的是 jstack、jmap、jinfo等JVM辅助分析工具。 -XX:ErrorFile=filename 用于当出现致命错误时,指定一个目录,用来存储Error信息。默认为当前目录下的hs_err_pidpid.log,也就是 filename=./hs_err_pidpid.log -XX:+FailOverToOldVerifier 当新的类型检查失败时,自动使用老的验证器。默认这个是关闭的,但是当我们需要时使用老版本的字节码的时候则需要开启这个选项。 -XX:+FilghtRecorder 嗯。Java 就是性能记录。这是一个商业特性,和 -XX:+UnlockCommercialFeatures 选项一起使用如果这个选项开启了,那么JVM的性能记录是不可用的。 -XX:-FilghtRecorder 嗯,又是性能记录。关闭了 -XX:FilghtRecorderOptions={ parameter=value、 defaultrecording={true|false}、 disk={true|false}、 dumponexit={true|false}、 dumponexitpath=path、 globalbuffersize=size loglevel={quiet|error|warning|info|debug|trace} maxage=time maxchunksize=size maxsize=size repository=path samplethreads={true|false} settings=path stackdepth=depth threadbuffersize=size } defaultrecording: 指定是否在后台一只记录还是只运行一段时间,默认这个参数的值是false。如果要一直开启,请设置为true。 disk:是否JRE持续的把记录写到硬盘中,默认false,如果想要持续记录,需要设置为true。 dumponexit:是否在JVM终止的时候记录JFE的数据 dumponexitpath:JVM终止是记录JFE的数据的路径,如果指定的是一个目录 JVM会自动创建一个文件(文件名一般是以当前时间生成),若是文件名,如果这个文件名已经存在了,通常会加一个时间后缀来区分。这个参数如果不生效,上一个参数的选项也是不成立的 globalbuffersize=size:指定保留数据的总大小。 loglevel:JFE日志的日志级别,默认 Info maxage:设置数据对大的保留时间 maxchunksize=size:设置数据最大块的大小 maxsize=size:设置数据在硬盘的最大容量,默认容量没有限制,前提:仅当disk=true时,此选项可用。 respository=path:设置临时仓库,默认使用系统的临时路径 samplethreads:设置是否进行线程抽样,默认为true setting=path:设置事件配置文件,默认是使用JAVA_HOME/jre/lib/default.jfc stackdepth=depth:设置对应栈追踪的深度,默认深度为64 threadbuffersize=size:指定每个线程的本地缓冲的大小,默认大小为5k

-XX:LargePageSizeInBytes=size 设置内存页的大小,但是注意,在Solaris上这个参数应该为2的幂。并且可以使用后缀单位,默认值为0,JVM自动选择大小。 -XX:MaxDirectMemorySize=size 设置直接内存的最大容量(NIO),这一点需要注意一下,尤其是项目中经常存在IO操作时。 有时候NIO用起来,异常坑。 -XX:NativeMemoryTracking={ off、summary、detail } 指定追踪JVM本地方法使用的模式, off:不跟踪本地方法的使用,这是默认的模式 summary:仅仅追踪JVM子系统的内存使用,比如java 堆,类,代码,线程 detail:除了跟踪内存使用的JVM子系统,通过单个调用callSite跟踪内存使用量、单个虚拟机区域&其委托区域 -XX:ObjectAlignmentInBytes=alignment 设置Java 对象的内存对齐,默认为8字节,制定值必须为2的幂,且必须在8~256之间。 没想到吧,这个竟然也能改 -XX:OnError=string 设置自定义的命令(使用逗号分隔),当发生致命错误时被执行 -XX:OnOutOfMemoryError=string 当发生OOM时所执行的命令 -XX:+PerfDataSaveToFile 在退出时保存jstat的二进制数据,名称:hsperfdata_。 当然也可以在jstat 保存数据 -XX:+PrintCommandLineFlags 输出JVM设置的选项和值,默认关闭 -XX:+PrintNMTStatistics 如果-XX:NativeMemoryTracking选线开启,那么这个选项会在JVM退出时打印本地内存的手机数据。默认关闭 -XX:+RelaxAccessControlCheck 较少访问控制检查,默认关闭 -XX:+ResourceManagement 在运行期间,启动资源管理 这是个商业特性,如果需要使用的话需要开启-XX:+UnlockCommercialFeatures -XX:ResourceManagementSampleInterval=value (milliseconds) 设置资源管理的采样间隔,只有启动采样时这个选项才有作用(-XX:+RecourseManagement) -XX:SharedArchiveFile=path 指定类数据分享文档目录 -XX:SharedClassListFile=file_name 指定一个文本文件,其中包含要存储到类共享文档中的类名。并且在命名规则中可以使用’/’替代’.’ 这些在文件中指定的类是被经常使用的类。 -XX:+ShowMessageBoxOnError 当JVM出现致命错误时,弹出一Msg 阻止JVM的退出。这时候我们可以使用JVM的外部调试工具连接JVM来查看对应的原因。这个在JVM排错时比较有用,尤其是无法直观获得错误原因时。默认关闭 -XX:StartFlightRecording={ parameter=value、 compress={true|false}、 defaultrecording={true|false}、 delay=time、 dumponexit={true|false}、 duration=time、 filename=path、 name=identifier、 maxage=time、 maxsize=size、 settings=path } 开启性能记录选项,这是一个商业特性同样的需要开启-XX:+UnlockCommercialFeatures,监控&后期分析JVM行为是比较有用的。 compress:是否执行压缩操作 defaultrecording:持续开启,还是只开一段时间。设置为true 时是持续开启的 delay:开启JVM后多久开始性能记录,默认值为0,即马上开始记录 dumponexit:在退出时是否产生性能记录 duration:性能记录的执行时长 filename:JFR记录的文件&路径 name:指定JFR记录的标示 maxage:性能记录的保存时间 setting=path:设置事件配置文件,默认是使用JAVA_HOME/jre/lib/default.jfc 以上为性能记录的启动参数选项,跟-XX:FilghtRecorderOptions参数的选项很多重复项,其实说的就是一个东西,一个是性能记录的基础的参数设置,一个是启动时设定罢了 -XX:ThreadStackSize=size 设置线程栈的深度或者大小。 之前有一个非标准参数 -Xss 和这个功能是相同的 -XX:+TraceClassLoading -XX:+TraceClassLoadingPreorder -XX:+TraceClassResolution -XX:+TraceClassUnloading -XX:+TraceLoaderConstraints 以上都为JVM的跟踪行为,只不过每一项指定的跟踪项不同 Loading 为类加载跟踪 LoadingPreorder 按照引用顺序跟踪类加载 Resolution 跟踪常量池行为 Unloading 跟踪类的卸载行为 LoaderConstraints 跟踪类加载器的约束行为 -XX:+UseAltSigs

-XX:+UseAppCDS 这也是个商业特性,同样需要开启-XX:+UnlockCommercialFeatures。 UseAppCDS属于体验特性,将来应该会发生变化。 作用:启动应用类数据共享(AppCDS),为了使用AppCDS,必须制定-XX:SharedClassListFile和-XX:SharedArchiveFile 两个选项。 -XX:-UseBiasedLocking 禁止使用偏向锁,这个还是经常使用的。 -XX:-UseCompressedOops 这个选项只用在64位操作系统下使用,默认压缩指针开启的。 当开启时,对象引用是32位的而不是64位,能够减少内存的使用。 -XX:+UseHugeTLBFS 在Linux中,这个选项相当于指定- xx:+ UseLargePages。实验特性,默认情况下是禁用的。此选项预先分配所有大页面,当内存保留时;因此,JVM不能动态地增长或缩小大页内存区域;看到- xx:UseTransparentHugePages如果你想要这种行为。 -XX:+UseLargePages 启动大的内存分页,默认关闭 -XX:+UseMembar 在线程转换时使用内存栅栏,默认关闭。 -XX:+UsePerfData 使用PerfData特性,默认开启 -XX:+UseTransparentHugePages 在Linux 中,允许使用动态增长或者扩展的页面。 算是实验特性,默认是被禁用的,因为当操作系统移动其他页面以创建巨大的页面时,可能会遇到巨大页面创建的性能问题。 -XX:+AllowUserSignalHandlers 允许使用信号处理器,默认为不开启。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
深度探索JFR - JFR详细介绍与生产问题定位落地 - 1. JFR说明与启动配置
我们都知道,黑匣子是用于记录飞机飞行和性能参数的仪器。在飞机出问题后,用于定位问题原因。JFR 就是 Java 的黑匣子。
干货满满张哈希
2021/04/12
2.4K0
深度探索JFR - JFR详细介绍与生产问题定位落地 - 1. JFR说明与启动配置
JVM Advanced JIT Compiler Options
JIT相关编译选项 Advanced JIT Compiler Options -XX:+AggressiveOpts 最核心的应该是加快编译,在JDK 6之后就默认启用的,启用一些诸如编译优化、偏向锁、并行化老年代收集策略。通常是不用管的,默认的优化策略,添加此参数的原因是为工程提供一个优化技术选择的空间。 -XX:AllocateInstancePrefetchLines=lines 在实例分配指针之前设置要预取的行数。默认情况下,要预取的行数设置为1。- xx:AllocateInstancePrefetchLines = 1只有Java HotSpot服务器VM支持这个选项。
邹志全
2020/02/25
1.4K0
JVM Non-Standard Options
准备对每一个参数进行详细的介绍,并且给出一些我所了解到的小技巧。 懂原理才能更好的使用嘛,推荐大家先把Java 使用熟练,然后好好看看JVM 原理相关的东西,最后再根据原理&使用 对于JVM进行更高效的利用。 下面开始介绍。 非标准参数(Non-Standard): -XBatch 虚拟机的缺省运行方式是在后台编译类代码,然后在前台执行代码,使用-XBatch参数时,会关闭虚拟机后台编译,在前台编译完成后再执行。 -Xbootclasspath:path -Xbootclasspath/a:path -Xbootclasspath/p:path 上面三个参数其实是一个参数。什么作用呢,挺简单的。就是改变虚拟机装载jar的方式,原本虚拟机是缺省系统运行包rt.jar,指定之后按照classpath中设定的搜索路径中装载系统运行类,除非我们需要写一个运行时,否则不会用到该参数。 其中存在 /a,/p 两个选项: /a:在缺省搜索路径后架上 -Xcheck:jni 是否调用JNI函数进行附加的检查,特别地虚拟机将校验传递给JNI函数参数的合法性,在本地代码中遇到非法数据时,虚拟机将会报一个致命错误然后终止。使用该参数会造成性能下降不少。谨慎使用~ -Xcomp、-Xmixed、-Xint 这三个参数放在一块儿说吧,作用很简单就是用来指定Java bytecode的运行方式。 其中-Xint全部使用字节码解释执行,这个是最慢的,慢的惊人,通常要比其他方式慢一个数量级左右。 -Xcomp相反,全部被编译成机器码执行,速度是很快的,但是存在一个缺陷,-Xcomp的策略过于简单,无法使用JIT的全部特性。比如 JIT会对在运行时对每个方法做统计,然后会有一些比如分支预测之类的自优化策略,但是使用-Xcomp时这个特性就无法生效了。还存在这样的一种情况,有些方法的调用比较少,但是也去做编译和优化的话,编译带来的开销还不如直接去解释执行那一块的代码,这样就产生一些不必要的开销了。这两种方式分场景来进行使用,针对合适的场景选择对应的模式。适合的才是最好的。还有一个参数,就是一种自适应的方式,有的地方解释执行,有的地方编译执行,具体的策略要依据profile的统计分析来判断。 注:中间提到了一个JIT,可能有的同学对这个不是非常熟悉。JIT 的全称是Just in time,也就是 “即时” ,这是一种即时编译技术,能够通过保存之前编译得到的机器码来替代对应字节码的解释执行操作及一些分支预测等自优化功能来加快Java 程序的执行速度。具体是怎么做到的呢。请看 Java 系列中的JIT技术。 -Xdebug 这个选项,其实什么也没做。仅仅是为了向后兼容而已。 -Xdiag 显示额外的诊断信息,如果出现问题你又觉着信息不够全面时。 -Xfuture 对类文件进行严格格式的检查,以保证类代码符合类代码规范。如果为缺省则不进行严格格式检查。 -Xinternalversion 显示比版本选项更详细的JVM版本信息,然后退出。 这个常用于 -version之后,看到的信息不够充分,你就可以使用它了,使用场景比较少 -Xloggc:filename 用于指定虚拟机每次垃圾回收时将回收的信息写到日志文件中,文件名由filename 指定 -Xmaxjitcodesize=size 为jit编译的代码指定最大代码缓存大小缺省单位为字节,也可以是k、m。默认的最大代码缓存大小为240 MB;如果使用选项- xx:- tiered编译禁用分层编译,那么默认大小是48 MB: -Xmaxjitcodesize = 240 这个选项相当于- xx:ReservedCodeCacheSize(下一篇会有具体的介绍)。 -Xmnsize 用于设置堆内新生代的大小,缺省单位为字节,也可以是k、m,后面有对应最大的虚拟机内存堆的最大可用大小,减去-Xmn就是老年代的大小。 -Xmssize 设置虚拟机内存堆的初始大小,缺省单位为字节(值必须为1024的整数倍,然后大于2m),当然也可以自行指定单位,比如说 k、m。缺省时,默认大小为2m。 -Xmxsize 设置虚拟机内存堆的最大可用大小,缺省单位为字节(值必须为1024的整数倍,然后大于2m),当然也可以自行指定单位,比如说 k、m。缺省时 默认最大为64m。 最常见的,如果我们运行的程序体量很庞大,64m已经远不够使用时,启动一段时间后可能会出现OOM,这时候就需要手动的去设置可用的堆内存的大小了。 -Xnoclassgc 关闭虚拟机对Class的垃圾回收功能。 -Xprof 输出CPU运行时的诊断信息。 -Xrs 减少虚拟机中操作系统信号的使用,这种参数 通常用于以后台服务方式运行,最经典的比如Servlet -Xshare:
邹志全
2020/02/25
5500
我所使用的生产 Java 17 启动参数
目前正常微服务综合内存占用+延迟+吞吐量,还是 G1 更优秀。但是如果你的微服务本身压力没到机器极限,要求延迟低,那么 ZGC 最好。如果你是实现数据库那样的需求(大量缓存对象,即长时间生存对象,老年代很大,并且还会可能分配大于区域的对象),那么必须使用 ZGC。
干货满满张哈希
2022/06/15
3.1K0
性能优化-jvm的运行参数
在jvm中有很多的参数可以进行设置,这样可以让jvm在各种环境中都能够高效的运行。绝大部分的参数保持默认即可。
cwl_java
2020/02/13
6800
jvm 调优命令_java jvm调优工具
所谓的标准参数,就是不会随着我们JDK 变化而变化版本的参数 这种参数可以通过Java -help查看(和Java -version使用方式一样)
全栈程序员站长
2022/11/17
9830
jvm 调优命令_java jvm调优工具
JVM Advanced Serviceability Options
Advanced Serviceability Options 这个系列的参数其实就是用来问题发生时来打印详细信息帮助分析的。 -XX:+ExtendedDTraceProbes 启动Dtrace探测器。 注:Dtrace,Dynamic tracing 即动态跟踪。通常用于性能跟踪,方便发现系统的瓶颈,及待提升之处。 -XX:+HeapDumpOnOutOfMemory 当发生OOM时转储Heap,这个选项最好开一下。有利于分析问题。 -XX:HeapDumpPath=path 堆转储文件路径
邹志全
2020/02/25
7020
一张PDF了解JDK11 GC调优秘籍-附PDF下载
JDK11相比JDK10,添加了一个新的Source-File Mode,可以直接通过java来运行单个java源文件,而不需要进行编译。同时还提供了新的HTTP API,支持响应性stream。
程序那些事
2020/07/24
1K0
进阶2:JVM 启动参数
JVM(Java虚拟机)的启动参数是在启动JVM时可以设置的一些命令行参数。这些参数用于指定JVM的运行环境、内存分配、垃圾回收器以及其他选项。以下是一些常见的JVM启动参数:
你可以叫我老白
2023/06/28
6730
进阶2:JVM 启动参数
JVM 监控,调优,调试
Java的安装包自带了很多优秀的工具,善用这些工具对于监控和调试Java程序非常有帮助。常用工具如下:
大道七哥
2019/08/23
9070
JVM参数表
Java HotSpot VM中-XX:的可配置参数列表进行描述;这些参数可以被松散的聚合成三类:
兜兜毛毛
2019/10/23
1.2K0
生产环境 Tomcat 调优实际操作
今天在新环境里部署tomcat, 刚开始启动很快,关闭之后再启动,却发现启动日志打印到
星哥玩云
2022/07/26
2K0
生产环境 Tomcat 调优实际操作
Tomcat调优和JVM优化[通俗易懂]
要添加在tomcat 的bin 下catalina.sh 里,位置cygwin=false前 。
全栈程序员站长
2022/06/26
6880
【JVM进阶之路】十:JVM调优总结
JVM调优听起来很高大上,但是要认识到,JVM调优应该是Java性能优化的最后一颗子弹。
三分恶
2021/04/13
14K0
JVM 运行时参数
官网地址:https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html
Li_XiaoJin
2022/06/12
5580
JVM 运行时参数
JVM 11 的调优指南:如何进行JVM调优,JVM调优参数
JVM 11的优化指南:如何进行JVM调优,以及JVM调优参数有哪些”这篇文章将包含JVM 11调优的核心概念、重要性、调优参数,并提供12个实用的代码示例,每个示例都会结合JVM调优参数和Java代码
搜云库技术团队
2024/01/17
1.6K0
JVM 11 的调优指南:如何进行JVM调优,JVM调优参数
查看JVM运行参数jinfo命令
jinfo 是 JDK 自带的命令,可以用来查看正在运行的 java 应用程序的扩展参数,包括Java System属性和JVM命令行参数;也可以动态的修改正在运行的 JVM 一些参数。当系统崩溃时,jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息 查看jvm所有参数默认值 > java -XX:+PrintFlagsInitial -version 查看jvm所有的参数 > java -XX:+PrintFlagsFinal -version 查看当前JVM运行的参数 用法: > ji
开源日记
2020/12/08
6.1K0
转: Tomcat 调优及 JVM 参数优化
http://blog.chopmoon.com/favorites/231.html
Dream城堡
2019/07/01
1K0
转: Tomcat 调优及 JVM 参数优化
使用 JDK 自带工具进行 JVM 诊断调优实战
最近参加面试多次被面试官问到JVM调 优方面的问题,即时自己面试前也重点复习了这一块的面试题,但是发现还是回答地不太好,浪费了好多次面试机会,真是让自己很抓狂。归根结底是自己以前一直只注重业务,而忽略了JVM调优这一块,对JVM这一块的实践太少了。这几天自己也重点观看了马士兵老师的JVM调优视频课, 看完之后自己也在本机和腾讯云服务器上进行了一番实践,感觉还是很有收获的。
用户3587585
2023/12/18
8140
使用 JDK 自带工具进行  JVM 诊断调优实战
Hotspot JVM常用选项
1. 标准选项:这类选项的功能是很稳定的,在后续版本中也不太会发生变化,即使有变化也必须保证向后兼容。运行java或java -help可以看到所有的标准选项。所有的标准选项都是以“-”开头,比如-version,-server等。
saintyyu
2021/11/22
3290
Hotspot JVM常用选项
相关推荐
深度探索JFR - JFR详细介绍与生产问题定位落地 - 1. JFR说明与启动配置
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文