JDK 8.x 微服务启动JVM参数调优实战
微服务启动JVM参数调优实战
- 1.1 配置JVM启动参数
- 1.2 解释
- 1.3 JVM参数优化思路
- 1.3.1 调整堆内存大小
- 1.3.2 年轻代大小
- 1.3.3 Metaspace 大小
- 1.3.4 栈大小
- 1.3.5 垃圾回收器选择
- 1.3.6 垃圾回收参数
- 1.3.7 预分配内存
- 1.3.8 禁用 ResizePLAB
- 2. 常用JVM参数
1.1 配置JVM启动参数
服务器配置
| 硬件 | 资源 |
|---|---|
| 内存 | 6Gi |
| CPU | 4核 |
APP_PARAM="-Xmx2g -Xms2g -Xmn768m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -Xss256k -XX:+UseG1GC -XX:+AlwaysPreTouch -XX:-ResizePLAB -XX:+ParallelRefProcEnabled -XX:+ExplicitGCInvokesConcurrent -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=4 -XX:ConcGCThreads=2"
1.2 解释
这是一个包含多个 Java 虚拟机(JVM)参数的变量 APP_PARAM,用于在启动 Java 程序时配置 JVM 的各种选项。让我们逐个解释这些参数的含义:
| JVM参数 | 解释 |
|---|---|
-Xmx2g | 设置 JVM 的最大堆内存为 2GB。这是 Java 堆可使用的最大内存量。 |
-Xms2g | 设置 JVM 的初始堆内存为 2GB。这是 Java 堆的初始内存大小,在 JVM 启动时将分配给堆。 |
-Xmn768m | 设置 JVM 的年轻代初始大小为 768MB。年轻代是 Java 堆中用于存放新创建的对象的区域。 |
-XX:MetaspaceSize=256m | 设置 Metaspace(元空间)的初始大小为 256MB。Metaspace 用于存放类的元数据。 |
-XX:MaxMetaspaceSize=256m | 设置 Metaspace(元空间)的最大大小为 256MB。当 Metaspace 达到这个大小时,JVM 将触发垃圾回收来回收不再使用的类元数据。 |
-Xss256k | 设置每个线程的栈大小为 256KB。这决定了每个线程可使用的内存大小。 |
-XX:+UseG1GC | 指定使用 G1 (Garbage-First) 垃圾回收器。G1 是一种现代的垃圾回收器,适用于大内存和多核处理器的应用。 |
-XX:+AlwaysPreTouch | 指定在 JVM 启动时,将堆的所有页面都预先分配和填充,以避免后续使用时的延迟。 |
-XX:-ResizePLAB | 禁用自适应的 Parallel Lab(PLAB)大小调整。PLAB 是 G1 回收器中用于优化对象分配的一种技术。 |
-XX:+ParallelRefProcEnabled | 启用并行的引用处理。这允许 G1 回收器在处理引用时使用并行处理。 |
-XX:+ExplicitGCInvokesConcurrent | 允许显式调用 System.gc() 时与并发标记周期并行执行垃圾回收。 |
-XX:MaxGCPauseMillis=200 | 设置期望的最大 GC 暂停时间为 200 毫秒。G1 回收器将尽力保持 GC 暂停时间在这个范围内。 |
-XX:ParallelGCThreads=4 | 设置并行垃圾回收的线程数为 4。这决定了在进行并行垃圾回收时使用的线程数量。 |
-XX:ConcGCThreads=2 | 设置并发垃圾回收的线程数为 2。这决定了在进行并发垃圾回收时使用的线程数量。 |
- 这些 JVM 参数可根据具体应用和硬件环境进行调整,以优化 Java 程序的性能和内存使用。
- 请注意,某些参数可能在不同的 Java版本中或不同的 JVM 实现中具有不同的效果,因此建议根据具体情况进行测试和调优。
1.3 JVM参数优化思路
优化 JVM 参数是一个复杂的过程,需要根据具体应用和硬件环境进行调整。
以下是一些建议的优化措施:
1.3.1 调整堆内存大小
考虑根据应用的实际内存需求,适度增加堆的最大内存 -Xmx 和初始内存 -Xms。但不要过度分配,避免过大的堆导致频繁的垃圾回收。
1.3.2 年轻代大小
-Xmn 设置年轻代初始大小。根据应用的对象创建频率和堆大小,适度调整年轻代大小。较小的年轻代可能导致更频繁的垃圾回收,较大的年轻代可能会减少垃圾回收的频率。
1.3.3 Metaspace 大小
-XX:MetaspaceSize 和 -XX:MaxMetaspaceSize 设置 Metaspace 的初始和最大大小。根据应用的类加载需求,适度增加 Metaspace 大小。
1.3.4 栈大小
-Xss 设置每个线程的栈大小。根据应用的线程需求,适度调整栈大小。过大的栈大小可能导致线程数受限于可用内存。
1.3.5 垃圾回收器选择
-XX:+UseG1GC 使用 G1 垃圾回收器是一个不错的选择,特别是在大内存和多核处理器环境下。
1.3.6 垃圾回收参数
根据实际情况调整垃圾回收器的参数,例如 -XX:MaxGCPauseMillis、-XX:ParallelGCThreads 和 -XX:ConcGCThreads。这些参数的调整需要在实际应用场景中进行性能测试和优化。
1.3.7 预分配内存
-XX:+AlwaysPreTouch 在 JVM 启动时预分配堆内存,避免后续内存分配导致的延迟。
1.3.8 禁用 ResizePLAB
-XX:-ResizePLAB 可以禁用 Parallel Lab(PLAB)大小调整。
- 优化 JVM 参数需要综合考虑应用的性能需求、硬件环境和可用内存资源。
- 建议在生产环境中进行测试和性能评估,逐步调整参数以达到最佳性能和内存利用率。
- 同时,注意不要过度优化,避免因过多的参数调整而引入新的问题。
2. 常用JVM参数

相关文章:
JDK 8.x 微服务启动JVM参数调优实战
微服务启动JVM参数调优实战 1.1 配置JVM启动参数1.2 解释1.3 JVM参数优化思路1.3.1 调整堆内存大小1.3.2 年轻代大小1.3.3 Metaspace 大小1.3.4 栈大小1.3.5 垃圾回收器选择1.3.6 垃圾回收参数1.3.7 预分配内存 1.3.8 禁用 ResizePLAB2. 常用JVM参数 1.1 配置JVM启动参数 服务…...
Web与HTTP
目录 DNS与域名 DNS解析的方式 过程 注册域名 html 名词解释 html的语法 web web2.0 静态页面特点 动态页面 动态页面特点 http协议 工作流程 http的请求方式 get post 状态码 常用状态码 通信套接字 套接字调用的端口 DNS与域名 网络是基于tcp/ip协议进…...
算法刷题Day 56两个字符串的删除操作+编辑距离
Day 56 动态规划 583. 两个字符串的删除操作 class Solution { public:int minDistance(string word1, string word2) {int m word1.size(), n word2.size();vector<vector<int>> dp(m 1, vector<int>(n 1, 0));for (int i 0; i < m; i){dp[i][0] …...
Flutter中Dart语言常用知识
目录 1. 变量和数据类型2. 函数3. 类4. 异常处理5. 泛型6. 变量声明和类型推断:7. 函数定义:8. 类定义和实例化:9. 接口定义:10. 抽象类定义:11. 混合类型列表:12. Flutter 中的 UI 组件:13.Dar…...
11万多英藏对照词典英藏翻译ACCESS\EXCEL数据库
今天继续发一个藏文藏语相关的翻译数据库,即英藏对照词典,加上《5万6千多藏文词典解释ACCESS数据库》以及昨天发的《近13万汉藏对照词典汉藏翻译ACCESS\EXCEL数据库》藏文类的数据就算较全了。 截图下方有显示“共有记录数”,截图包含了表的所…...
浅谈C语言分支循环语句
为什么需要循环控制? 因为在日常生活中或者在程序所处理的问题中常常遇见需要重复处理的问题,用循环语句可以提高代码的运行效率,更快的解决日常生活中遇到的问题。 循环嵌套 就是传说中的套娃,不同的循环语句都可以互相嵌套。 …...
Spring Boot Starter 剖析与实践 | 京东云技术团队
引言 对于 Java 开发人员来说,Spring 框架几乎是必不可少的。它是一个广泛用于开发企业应用程序的开源轻量级框架。近几年,Spring Boot 在传统 Spring 框架的基础上应运而生,不仅提供了 Spring 的全部功能,还使开发人员更加便捷地…...
技术能力提升-《系统架构设计师教程》
在最近的月度读书会上,国林哥分享了下对《系统架构设计教程》的一点见解,在技术管理摸爬滚打了多年,觉得这个认证还是有一定价值,希望对有兴趣了解这门认证考试的朋友有所帮助,起到抛砖引玉的作用。 国林哥从以下四个方…...
【LeetCode 热题 100】矩阵 专题(大多原地算法,需要一定思维)
解题思路 在 代码注释中! 文章目录 73. 矩阵置零54. 螺旋矩阵48. 旋转图像240. 搜索二维矩阵 II 73. 矩阵置零 class Solution { public:void setZeroes(vector<vector<int>>& matrix) {// 难点:原地算法// 直接复用 matrix 第一行 和 …...
Java 中为什么要把一个数模(10^9+7)
在计算机科学和编程中,经常会遇到需要对结果进行取模操作的情况。模运算是指将一个数除以另一个数,并取得余数的运算。 在 Java 中,常见的一个数取模的值是 (10^97),即 1000000007。这个特定的数值经常在算法和数学计算中被使用&…...
RPC与REST有什么区别?
原文:RPC与REST有什么区别? 背景 好多开发的同学在工作中,经常分不清RPC和REST的区别,导致经常沟通不在一个层次上。甚至有些同学把这两个当成同一个东西。 RPC与REST的区别? 对比名称 rpc rest 备注 架构风格 RP…...
时间复杂度介绍及其计算
时间复杂度 1.算法效率 如何衡量一个算法的好坏呢?看这段代码: long long Fib(int N) {if(N < 3)return 1;return Fib(N-1) Fib(N-2); }这是斐波那契数列的递归代码,非常简洁,那么这就一定说明它好吗?答案显而易…...
etcd实现大规模服务治理应用实战
导读:服务治理目前越来越被企业建设所重视,特别现在云原生,微服务等各种技术被更多的企业所应用,本文内容是百度小程序团队基于大模型服务治理实战经验的一些总结,同时结合当前较火的分布式开源kv产品etcd,…...
目标检测中 anchor base和anchor free
目标检测中两种不同anchor的生成 趋势:anchor free越来越受到实时性检测的青睐,,,...
TypeC拓展设计方案|TypeC转HDMI设计方案|CS5261/CS5265芯片设计参数对比
集睿智远CS5261/CS5265都可以用于设计TypeC转HDMI方案,低成本TypeC扩展坞设计方案,而两者也有些差异:1.CS5261支持DP1.4输入,一个HDMI1.4输出,即HDMI输出为4K30HZ ;CS5265DP1.4到HDMI2.0转换芯片,即HDMI输出…...
SQL Developer中的Active Data Guard
这篇文章 Display Data Guard configuration in SQL Developer 中,用SQL Developer展示了多种ADG的拓扑。 今天自己也试了一下,还蛮简单的,其实最麻烦的部分在于搭建一个ADG环境。 假设我已有一个ADG环境,即最典型的环境&#x…...
谈谈FFT到底有何用
谈谈FFT到底有何用 FFT快速傅里叶变换是数字信号处理的经典算法,学过DSP或者芯片设计的人大多知道这个算法;但是,大家是否想过,为什么数字信号处理会有那么多FFT呢有人会说,为了分析信号的频谱;那么下边的问题就是,分析频谱对我们的日常需求,比如手机打电话,雷达测量速度和方向…...
MATLAB | 如何绘制这样的描边散点图?
part.-1 前前言 最近略忙可能更新的内容会比较简单,见谅哇,今日更新内容: part.0 前言 看到gzhBYtools科研笔记(推荐大家可以去瞅瞅,有很多有意思的图形的R语言复现!!)做了这样一张图: 感觉很…...
偶数科技与白鲸开源完成兼容性认证
近日,偶数科技自主研发的云原生分布式数据库 OushuDB v5.0 完成了与白鲸开源集成调度工具 WhaleStudio v2.0 的兼容性相互认证测试。 测试结果显示,双方产品相互良好兼容,稳定运行、安全,同时可以满足性能需求,为企业级…...
【机器学习】Feature scaling and Learning Rate (Multi-variable)
Feature scaling and Learning Rate 1、数据集2、学习率2.1 α \alpha α 9.9e-72.2 α \alpha α 9e-72.3 α \alpha α 1e-7 3、特征缩放3.1 特征缩放的原因3.2 Z-score 归一化3.3 预测3.4 损失等值线 导入所需的库 import numpy as np np.set_printoptions(precision…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
