JDK 8.x 微服务启动JVM参数调优实战

news2024/11/17 8:31:30

微服务启动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
CPU4核
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参数

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/816878.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每日一题——重建二叉树

重建二叉树 题目描述 给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。 提示: 1.vin.length pre.length 2.pre 和…

颠倒二进制位,颠倒给定的 32 位无符号整数的二进制位。

题记: 颠倒给定的 32 位无符号整数的二进制位。 提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的…

ChatPaper全流程加速科研:论文阅读+润色+优缺点分析与改进建议+审稿回复

项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实…

惊喜!1行Python代码,瞬间测你工作量,分享一个统计代码行数的神器

大家好,这里是程序员晚枫。 **你想不想知道一个项目中,自己写了多少行代码?**我用今天的工具统计了一下开源项目:python-office的代码行数,竟然有21w行! 我们一起看一下怎么用最简单的方法,统…

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(16)-Fiddler如何充当第三者再识AutoResponder标签-上

1.简介 Fiddler充当第三者,主要是通过AutoResponder标签在客户端和服务端之间,Fiddler抓包,然后改包,最后发送。AutoResponder这个功能可以算的上是Fiddler最实用的功能,可以让我们修改服务器端返回的数据&#xff0c…

Windows10系统还原操作

哈喽,大家好,我是雷工! 复制了下虚拟机的Win10系统,但其中有一些软件,想实现类似手机的格式化出厂操作,下面记录Windows10系统的还原操作。 一、系统环境: 虚拟机内的Windows10,64…

JavaWeb第三章:JavaScript的全面知识

目录 前言 一.JavaScript的简介 💖概念 💖学习内容 二.JavaScript的引入方式 💖内部脚本 💖外部脚本 三.JavaScript的基础语法 💖语法的书写 💖变量 ✨ 全局变量 ✨局部变量 ✨常量 &a…

vue表单筛选

目录 筛选 HTML scss* filterComp 排序 表格 自定义数据样式 inner-table 分页 删除 default-modal 自定义元素的插槽-占位符 .search-wrap {height: 60px;display: flex;align-items: center;overflow: hidden;padding: 0 20px;.selected-options-wrap {flex: 1;.…

PostgreSQL数据库中,查询时提示表不存在的解决办法

最近遇到一个奇怪的问题,以前从来没有遇到过,在postgres SCHEMA下执行select * from table1语句时,提示表不存在,而实际这个表确是存在的,只不过是在public SCHEMA下。在public SCHEMA下执行这个sql语句是没有问题的。…

主成分分析PCA算法

Principal Components Analysis 这个协方差矩阵是一个nXn的,且是对称矩阵,就会有n个特征值λ和特征向量v,每个特征向量也是n维的。第一行特征向量v对应特征值λ1 。 D(yk):表示主成分yk的方差。方差越大,说明携带的信…

如何在不使用脚本和插件的情况下手动删除 3Ds Max 中的病毒?

如何加快3D项目的渲染速度? 3D项目渲染慢、渲染卡顿、渲染崩溃,本地硬件配置不够,想要加速渲染,在不增加额外的硬件成本投入的情况下,最好的解决方式是使用渲云云渲染,在云端批量渲染,批量出结…

【迁移】Mysql数据库备份 迁移

【迁移】Mysql数据库备份 迁移 📔 千寻简笔记介绍 千寻简笔记已开源,Gitee与GitHub搜索chihiro-notes,包含笔记源文件.md,以及PDF版本方便阅读,且是用了精美主题,阅读体验更佳,如果文章对你有…

金蝶云星空任意文件读取漏洞复现(0day)

0x01 产品简介 金蝶云星空是一款云端企业资源管理(ERP)软件,为企业提供财务管理、供应链管理以及业务流程管理等一体化解决方案。金蝶云星空聚焦多组织,多利润中心的大中型企业,以 “开放、标准、社交”三大特性为数字…

【Linux】 UDP网络套接字编程

🍎作者:阿润菜菜 📖专栏:Linux系统网络编程 文章目录 一、网络通信的本质(port标识的进程间通信)二、传输层协议UDP/TCP认识传输层协议UDP/TCP网络字节序问题(规定大端) 三、socket编…

ClickHouse的安装启动

安装步骤 1.关闭防火墙 2.修改资源限制配置文件 2.1 路径:/etc/security/limits.conf 在末尾添加: * soft nofile 65536 #任何用户可以打开的最大的文件描述符数量,默认1024 这里的设置会限制tcp连接数 * hard nofile 65536 * soft nproc…

什么是架构 架构图

如何画架构图_个人渣记录仅为自己搜索用的博客-CSDN博客 什么是架构?要表达的到底是什么? Linus 03 年在聊到拆分和集成时有一个很好的描述: I claim that you want to start communicating between independent modules no sooner than you…

【指针三:穿越编程边界的超能力】

本章重点 9.指针和数组面试题的解析 10. 指针笔试题 九、指针和数组面试题的解析 1、一维数组的sizeof #include<stdio.h> int main() {int a[] { 1,2,3,4 };printf("%d\n", sizeof(a));printf("%d\n", sizeof(a 0));printf("%d\n", s…

探索运营商渠道佣金数字化运营

当前全球经济增长放缓&#xff0c;行业竞争持续加剧已是常态&#xff0c;用户需求越发苛刻、经营成本不断上升。内忧外患&#xff0c;企业经营如何突围&#xff1f;越来越多的企业发现&#xff0c;融合数字化技术的IT解决方案为企业提供了一种解决问题的可能。 数字化运营可以帮…

反转链表(JS)

反转链表 题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&…

809协议

809协议 目录概述需求&#xff1a; 设计思路实现思路分析1.809协议数据流——链路管理类 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,…