百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

JVM常用参数自查笔记(jvm参数怎么看)

yuyutoo 2025-03-26 18:55 8 浏览 0 评论

配置堆区:-Xms 、-Xmx、-XX:newSize、-XX:MaxnewSize、-Xmn;

-Xms :表示java虚拟机堆区内存初始内存分配的大小,通常为操作系统可用内存的1/64大小即可,但仍需按照实际情况进行分配。

-Xmx: 表示java虚拟机堆区内存可被分配的最大上限,通常为操作系统可用内存的1/4大小。但是开发过程中,通常会将 -Xms 与 -Xmx两个参数的配置相同的值,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源。(PS:当初始堆占满后,会尝试进行GC,如果GC之后还不能得到足够的内存,那么就会扩展堆,如果-Xmx设置的太小,扩展堆就会失败,导致OutOfMemoryError错误提示)

一般来讲对于堆区的内存分配只需要对上述两个参数进行合理配置即可,但是如果想要进行更加精细的分配还可以对堆区内存进一步的细化,那就要用到下面的三个参数了-XX:newSize、-XX:MaxnewSize、-Xmn。当然这源于对堆区的进一步细化分:新生代、中生代、老生代。java中每新new一个对象所占用的内存空间就是新生代的空间,当java垃圾回收机制对堆区进行资源回收后,那些新生代中没有被回收的资源将被转移到中生代,中生代的被转移到老生代。而接下来要讲述的三个参数是用来控制新生代内存大小的。

-XX:newSize:表示新生代初始内存的大小,应该小于 -Xms的值;

-XX:MaxnewSize:表示新生代可被分配的内存的最大上限;当然这个值应该小于 -Xmx的值;

-Xmn:至于这个参数则是对 -XX:newSize、-XX:MaxnewSize两个参数的同时配置,也就是说如果通过-Xmn来配置新生代的内存大小,那么-XX:newSize

= -XX:MaxnewSize = -Xmn,虽然会很方便,但需要注意的是这个参数是在JDK1.4版本以后才使用的。

配置非堆区:-XX:PermSize、-XX:MaxPermSize

-XX:PermSize:表示非堆区初始内存分配大小,其缩写为permanent size(持久化内存)

-XX:MaxPermSize:表示对非堆区分配的内存的最大上限。 这里面非常要注意的一点是:在配置之前一定要慎重的考虑一下自身软件所需要的非堆区内存大小,因为此处内存是不会被java垃圾回收机制进行处理的地方。并且更加要注意的是最大堆内存与最大非堆内存的和绝对不能够超出操作系统的可用内存。

如DDW项目启动Tomcat内存参数: JAVA_OPTS="-server -Xms4096m -Xmx5096m

-XX:MaxNewSize=128m -XX:PermSize=256M -XX:MaxPermSize=512m -Djava.awt.headless=true -Dfile.encoding=UTF-8"

获取垃圾回收器信息:

-XX:+PrintCommandLineFlagsjvm参数可查看默认设置收集器类型

-XX:+PrintGCDetails亦可通过打印的GC日志的新生代、老年代名称判断

java命令中的参数配置:

-Xmixed 混合模式执行 (默认)

-Xint 仅解释模式执行

-Xbootclasspath:<用 zipjar>

设置搜索路径以引导类和资源

-Xbootclasspath/a:<用 zipjar>

附加在引导类路径末尾

-Xbootclasspath/p:<用 zipjar>

置于引导类路径之前

-Xdiag 显示附加诊断消息

-Xnoclassgc 禁用类垃圾收集

-Xincgc 启用增量垃圾收集

-Xloggc: 将 GC 状态记录在文件中 (带时间戳)

-Xbatch 禁用后台编译

-Xms 设置初始 Java 堆大小

-Xmx 设置最大 Java 堆大小

-Xss 设置 Java 线程堆栈大小

-Xprof 输出 cpu 配置文件数据

-Xfuture 启用最严格的检查, 预期将来的默认值

-Xrs 减少 Java/VM 对操作系统信号的使用 (请参阅文档)

-Xcheck:jni 对 JNI 函数执行其他检查

-Xshare:off 不尝试使用共享类数据

-Xshare:auto 在可能的情况下使用共享类数据 (默认)

-Xshare:on 要求使用共享类数据, 否则将失败。

-XshowSettings 显示所有设置并继续

-XshowSettings:all

显示所有设置并继续

-XshowSettings:vm 显示所有与 vm 相关的设置并继续

-XshowSettings:properties

显示所有属性设置并继续

-XshowSettings:locale

显示所有与区域设置相关的设置并继续


XX参数

  这是我们日常开发中接触到最多的参数类型。这也是非标准化参数,相对来说不稳定,随着JVM版本的变化可能会发生变化,主要用于JVM调优和debug。

注意:这种参数是我们后续介绍JVM调优讲解最多的参数。

该参数的书写形式又分为两大类:

①、Boolean类型

  格式:-XX:[±] 表示启用或者禁用name属性。

例子:-XX:+UseG1GC(表示启用G1垃圾收集器)

②、Key-Value类型

  格式:-XX:= 表示name的属性值为value。

例子:-XX:MaxGCPauseMillis=500(表示设置GC的最大停顿时间是500ms)

参数详解(持续更新)

  本节我们会持续更新罗列一些JVM参数。

1、打印已经被用户或者当前虚拟机设置过的参数

-XX:+PrintCommandLineFlags

  比如:

2、最大堆和最小堆内存设置

-Xms512M:设置堆内存初始值为512M

-Xmx1024M:设置堆内存最大值为1024M

这里的ms是memory start的简称,mx是memory max的简称,分别代表最小堆容量和最大堆容量。但是别看这里是-X参数,其实这是-XX参数,等价于:

-XX:InitialHeapSize

-XX:MaxHeapSize

在通常情况下,服务器项目在运行过程中,堆空间会不断的收缩与扩张,势必会造成不必要的系统压力。所以在生产环境中,JVM的Xms和Xmx要设置成一样的,能够避免GC在调整堆大小带来的不必要的压力。

3、Dump异常快照以及以文件形式导出

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath

堆内存出现OOM的概率是所有内存耗尽异常中最高的,出错时的堆内信息对解决问题非常有帮助,所以给JVM设置这个参数(-XX:+
HeapDumpOnOutOfMemoryError),让JVM遇到OOM异常时能输出堆内信息,并通过(-XX:+HeapDumpPath)参数设置堆内存溢出快照输出的文件地址,这对于特别是对相隔数月才出现的OOM异常尤为重要。

这两个参数通常配套使用:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./

4、发送OOM后,执行一个脚本

-XX:OnOutOfMemoryError

比如这样设置:

-XX:OnOutOfMemoryError=“C:\Program Files\Java\jdk1.8.0_152\bin\jconsole.exe”

  表示发生OOM后,运行jconsole.exe程序。这里可以不用加“”,因为jconsole.exe路径Program Files含有空格。

利用这个参数,我们可以在系统OOM后,自定义一个脚本,可以用来发送邮件告警信息,可以用来重启系统等等。

5、打印gc信息

①、打印GC简单信息

-verbose:gc

-XX:+PrintGC

一个是标准参数,一个是-XX参数,都是打印详细的gc信息。通常会打印如下信息:

比如第一行,表示GC回收之前有12195K的内存,回收之后剩余1088K,总共内存为125951K

②、打印详细GC信息

-XX:+PrintGCDetails

-XX:+PrintGCTimeStamps

6、指定GC日志以文件输出

-Xloggc:./gc.log

这个在参数用于将gc日志以文件的形式输出,更方便我们去查看日志,定位问题。

7、设置永久代大小

-XX:MaxPermSize=1280m

在JDK1.7以及以前的版本中,只有Hotspot 才有Perm区,称为永久代,它在启动时固定大小,很难进行调优。

在某些情况下,如果动态加载类过多,容易产生Perm区的 OOM。比如某个实际 Web 工程中,因为功能点较多,在运行过程中,要不断动态加载很多类,就会出现类似错误:

“Exception in thread ‘dubbo client x.x.connect’ java.lang.OutOfMemoryError:PermGenspace”

为了解决这个问题,就需要在项目启动时,设定运行参数-XX:MaxPermSize。

注意:在JDK1.8以后面的版本,使用元空间来代替永久代。在 JDK1.8以及后面的版本中,如果设定参数-XX:MaxPermSize,启动JVM不会报错,但是会提示:

Java Hotspot 64Bit Server VM warning:ignoring option MaxPermSize=1280m:support was removed in 8.0

8、垃圾收集器常用参数

————————————————

版权声明:本文为CSDN博主「夜里慢慢行456」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:
https://blog.csdn.net/u013257767/article/details/105569044

相关推荐

苹果要求全新App开发四月起必须支持“齐刘海”

今日消息,苹果公司通过邮件告知应用程序开发者,从2018年4月起提交给AppStore的所有新应用必须支持iPhoneX的超级视网膜显示器。这意味着新应用程序的开发者必须确保它们适应“齐刘海”,并...

耗时一年多,QEMU开发者成功在电脑上模拟了初版iPhone OS

IT之家12月24日消息,用户通过黑苹果(Hackintosh)工具,已经可以在非Mac设备上运行macOS系统。但由于种种限制,至今也没有多少人能够在PC上运行iOS系统。现...

下个月的WWDC后,苹果将发布原生Watch SDK测试版本

在近日Re/code举办的CodeConference上,苹果的运营副总裁JeffWilliams称,目前有4000多个AppleWatch应用上线,而未来的苹果表开发者套件,将允许开发者直接获...

苹果再次提醒:4月起强制要求APP进行适配

点击右上角关注我们,每天给您带来最新最潮的科技资讯,让您足不出户也知道科技圈大事!软件适配对于许多厂商来说都是一个比较头疼的事,苹果在握紧AppStore审核权的情况下情况要好许多。最近他们公布了...

苹果Xcode 16首个Beta版发布,AI代码补全最少需16GB内存

IT之家6月12日消息,在苹果WWDC24开发者大会上,苹果发布了iOS18、macOS15Sequoia等最新版本系统更新。与此同时,苹果推出了Xcode16开发工具的首...

传苹果已向特定开发者开放iWatch SDK

|责编:薄志强苹果会不会在这次发布会中发布全新的智能手表产品iWatch还很难说,不少人认为由于iWatch的消息少之又少,很可能这次还是没有iWatch。不过现在又有外媒传出消息称,苹果已经选定了...

苹果发布Swift 6语言:引入新测试框架、增强C++ 互操作性

IT之家9月20日消息,科技媒体devclass昨日(9月19日)报道,苹果公司在发布iOS/iPadOS18和macOS15Sequoia系统之外,还发布了Sw...

发布Siri SDK 之前苹果还是先想想这个问题

今年的GoogleI/O大会上,在预览GoogleHome时,我们就看到了设备可以互相对话的场景是多么惊艳,苹果快点跟上吧。最近因为亚马逊Echo和谷歌GoogleHome的火热...

iOS 17.2 SDK代码确认古尔曼爆料:免开箱更新苹果iPhone系统

IT之家10月27日消息,彭博社的马克古尔曼(MarkGurman)本月早些时候发布报道,称苹果正在研发新的系统,可以让员工在不拆开包装的情况下,升级iPhone的iOS系统。根据国...

《企业应用架构模式》之事件驱动架构

事件驱动架构(Event-DrivenArchitecture,EDA)是一种强调事件流和异步通信的应用程序架构。在该架构中,应用程序被分解为多个小型、可独立部署的组件,这些组件通过事件进行通信...

k8s中常用的controller以及用途和对应机制

controller的用途ReplicaSet、Deployment、StatefulSet:用于无状态和有状态应用的副本管理。DaemonSet:确保每个节点上都运行一个副本的控制器。...

Disruptor框架源码阅读-如何不重复消费

RingBuffer如何保证数据不丢失由于ringbuffer是一个环形的队列,那么生产者和消费者在遍历这个队列的时候,如何制衡呢?1、生产快,消费慢,数据丢失?生产者速度过快,导致一个对象还没消...

C# 控制电脑睡眠,休眠,关机以及唤醒

最近碰到一个关于芯片测试过程中的问题,这颗芯片是用在笔记本端口上,笔记本客户那边会有一个压力测试,就是频繁的电脑电源状态切换,S0(正常使用的开机状态),S3(睡眠模式),S4(休眠模式)以及S5(关...

大厂防止超卖的7种实现,很受用!(大厂防止超卖的7种实现,很受用的产品)

高并发场景在现场的日常工作中很常见,特别是在互联网公司中,这篇文章就来通过秒杀商品来模拟高并发的场景。本文环境:...

臻识车牌识别配制MQTT通讯,解析车号

在物联网项目中,我们的软件与车牌识别通讯,通常使用MQTT通讯更简单。...

取消回复欢迎 发表评论: