首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

JVM 参数配置

编程知识
2024年08月14日 15:36

JVM 参数设置入门案例

JVM 的内存参数众多,但是在实际应用中主要关注堆内存的大小设置及堆内存中新生代和老年代的大小设置,下面看一个简单的 JVM 启动参数设置案例:

java -server
-Xms3g -Xmx3g
-XX:NewSize=1g
-XX:MetaspaceSize=128m
-XX:NewRatio=3
-XX:SurvivorRatio=8
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=dump.log -jar start.jar

-Xms -Xmx:-Xms 表示初始堆大小,-Xmx 表示最大堆大小。一般将 Xms 和 Xmx 设置为相同的值,避免垃圾回收后 JVM 重新分配堆内存大小而引起内存震荡,影响性能。可将堆内存的大小简单理解为 JVM 在运行过程中可用到的总内存大小。

-XX:NewSize:-XX:NewSize=1g 表示设置新生代的大小为 1GB,一般建议设置为总堆内存的 1/3

-XX:MetaspaceSize:表示元空间的大小为 128MB,当要加载的类库过多时,可以适当调高这个值

-XX:NewRatio:-XX:NewRatio=3 表示设置新生代与老年代的比值为 1:3,因此新生代占整个堆栈的 1/4,老年代占整个堆内存的 3/4

-XX:SurvivorRatio: -XX:SurvivorRatio=8 表示 Eden 区和两个 Survivor 区的比值为 8:1,即 Eden:SurvivorTo=8:1、Eden:SurvivorFrom=8:1。最终的结果是 Eden:SurvivorTo:SurvivorFrom=8:1:1

-XX:+UseParNewGC XX:+UseConcMarkSweepGC:垃圾回收器设置 -XX:+UseParNewGC 表示设置年轻代垃圾回收器为 ParNew 垃圾回收器。-XX:+UseConcMarkSweepGC 表示设置老年代垃圾回收器为 CMS 垃圾回收器

-OOM异常诊断设置:XX:HeapDumpOnOutOfMemoryError 表示当发生 OOM 时转储堆到文件。XX:HeapDumpPath 表示堆的转储文件路径地址。这两个参数结合起来,可以在程序出现 OOM 时及时将堆信息打印出来,方便后续分析故障


JVM 参数设置实战

在进行 JVM 参数设置时需要重点关注垃圾回收器的设置和 JVM 内存的设置。接下以在一个 8GB 的服务器上独立运行一个名为 start.jar 的 Netty 应用服务为例,介绍内存设置的流程

  1. 预留操作系统内存:首先确定操作系统的总内存为 8GB,为操作系统预留 2GB 内存,保障操作系统运行流畅,将剩余的 6GB 内存分配给应用程序
  2. 确定直接内存:由于我们的应用程序为 Netty 服务端,Netty 服务在运行过程中会使用直接内存来提高性能,因此应用程序在运行过程中会有大量直接内存的使用。为了保障应用程序既有足够的直接内存保障服务高效运行,又不至于占用过多堆外内存导致系统内存不足而产生 OOM 问题,我们将 2GB(应用程序可用内存的1/3)内存预留给直接内存,通过 -XX:MaxDirectMemorySize-2g 设置可用的最大堆外内存为 2GB。在使用过程中会按需分配足够的内存给直接内存,但最大不超过 2GB
  3. 确定 Java 堆的大小:剩余的 4GB 内存,将 3GB 分配给 Java 堆,这样就可以确定 -Xm3g -Xmx3g
  4. 确定新生代和老年代的大小:由于没有特殊的大对象和过多长生命周期的对象,所以可以将堆内存的 1/3 分配给新生代,也就是 -XX:NewSize=1g,将其他剩余的 2GB 内存分配给老年代。同时,由于我们的程序为一般的 Java 程序,所以 Survivor 区和 Eden 区的配置可以采用官网建议的值,这里不做特殊设置
  5. 确定元空间区:接下来还剩余 1GB 内存可供应用程序使用,由于应用程序及其依赖的 JAR 包不大,所以可通过 XX:MetaspaceSize=128m 设置元空间大小为 128MB。将剩余的少部分内存留给操作系统或者其他应用程序使用
  6. 配置 GC:最后设置垃圾回收器、OOM 异常数据转储路径和 GC 日志。使用 -XX:+UserConcMarkSweepGC 可设置老年代使用 CMS 垃圾回收器,新生代使用默认的 ParNew 垃圾回收器。使用 -XX:+UseG1GC 可设置使用 G1 垃圾回收器

具体配置如下:

java -server
-XX:MaxDirectMemorySize=2g # 直接内存的大小为 2GB
-Xms3g -Xmx3g # Java 堆内存的大小为 3GB
-XX:NewSize=1g # 新生代的大小为 1GB
-XX:MetaspaceSize=128m # 元空间为 128MB
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC # 新生代使用 ParNewGC,老年代使用 CMS
-xx:+HeapDumponCutOfMemoryError # 在发生 OOM 时打印日志
-XX:HeapDumpPath=dump.log # OOM 日志存储地址
-XX:+PrintGC # 输出 GC 日志
-XX:+PrintGCDetails # 输出 GC 的详细日志
-XX:+PrintGCDatestamps # 输出 GC 的时间戳
-XX:+PrintHeapAtGC # JVM 在执行 GC 操作的前后打印堆的信息
-Xlogge:../gc/gc.log # GC日志的输出地址
-jar start.jar

另外,需要注意不同 JVM 版本的配置参数不同,比如 -XX:PermSizeXX-XX:MaxPermsize 分别表示永久代的初始化大小和永久代的最大大小。但是在 Java8 已经没有永久代了,因此也不存在该配置参数。

From:https://www.cnblogs.com/Yee-Q/p/18359152
本文地址: http://shuzixingkong.net/article/1100
0评论
提交 加载更多评论
其他文章 使用Django-Channels实现websocket通信+大模型对话
前言 最近一直在做这个大模型项目,我选了 Django 作为框架(现在很多大模型应用都用的 FastAPI,不过我已经用习惯 Django 了) 之前使用 AspNetCore 作为后端的时候,我先后尝试了 Blazor Server,WebAPI SSE(Server Sent Event)等方案
使用Django-Channels实现websocket通信+大模型对话 使用Django-Channels实现websocket通信+大模型对话
什么是依赖倒置原则
依赖倒置原则(Dependency Inversion Principle, DIP)是面向对象设计原则之一,它是SOLID原则中的"D"。依赖倒置原则的核心思想是高层策略性业务规则不应该依赖于低层的具体实现细节,而两者都应该依赖于抽象。 依赖倒置原则主要包含两个基本点: 抽象不
kubernetes负载感知调度
背景 kubernetes 的原生调度器只能通过资源请求来调度 pod,这很容易造成一系列负载不均的问题, 并且很多情况下业务方都是超额申请资源,因此在原生调度器时代我们针对业务的特性以及评估等级来设置 Requests/Limit 比例来提升资源利用效率。 在这种场景下依然存在很多问题: 节点负载
kubernetes负载感知调度 kubernetes负载感知调度
线上问题排查——磁盘满
现象 群里反馈管理后台登录不上了,我一访问,整个界面空白,没有提示,打开 F12,发现控制台提示 js、css 等静态资源报 net::ERR_HTTP2_PROTOCOL_ERROR,客户端可以下载到服务端资源,第一次碰到这个,StackOverflow 走起 net::ERR_HTTP2_PRO
线上问题排查——磁盘满 线上问题排查——磁盘满 线上问题排查——磁盘满
TCP三次握手和四次挥手
TCP三次握手和四次挥手详解 在网络通信中,TCP(传输控制协议)是一个非常重要的协议,用于确保数据在不可靠的网络环境中能够可靠传输。TCP通过三次握手(Three-way Handshake)建立连接,通过四次挥手(Four-way Termination)终止连接。 一、TCP三次握手 TCP的
Java 大文件IO操作效率对比【我说说 你瞅瞅】
Java 文件IO操作效率对比 通过以下几种方式读取数据文件,并连续进行 10 次测试: 1. FileInputStream + byte[] 文件字节输入流 + 字节数组读取方式 2. FileInputStream + Scanner 文件字节输入流 + Scanner 读取方式 3. Fi
这次轮到AntV增强Awesome-Graphs
AntV团队迅速将G6图可视化引擎融入Awesome-Graphs项目,发布1.2.0版本,提升交互体验,包括路径高亮、模糊搜索等功能,现邀请体验并征集改进意见。
这次轮到AntV增强Awesome-Graphs 这次轮到AntV增强Awesome-Graphs 这次轮到AntV增强Awesome-Graphs
SenseCraft 部署模型到Grove Vision AI V2图像处理模块
今天教大家快速上手Grove Vision AI V2 图像处理模块,我们将一起探讨如何利用 SenseCraft 部署 AI 模型,和如何通过XIAO ESP32C3调用这些模型,轻松实现智能视觉功能!
SenseCraft 部署模型到Grove Vision AI V2图像处理模块 SenseCraft 部署模型到Grove Vision AI V2图像处理模块 SenseCraft 部署模型到Grove Vision AI V2图像处理模块