【工作中问题解决实践 十三】线上JVM参数该如何配置

在线上部署Java应用时,可以通过Java虚拟机(JVM)的参数来控制内存的分配和管理。

常见的JVM配置参数

以下是一些常见的JVM内存参数:

  1. -Xms: 设置JVM的初始堆大小。 重点关注
  2. -Xmx: 设置JVM的最大堆大小。 重点关注
  3. -Xmn: 设置年轻代(Young Generation)的大小。 重点关注
  4. -XX:NewRatio: 设置年轻代和老年代(Old Generation)的大小比例。
  5. -XX:SurvivorRatio: 设置Eden区与Survivor区的大小比例。
  6. -XX:PermSize: 设置永久代(Permanent Generation)的初始大小。
  7. -XX:MaxPermSize: 设置永久代的最大大小(在Java 8及之后版本中已被移除,由元数据空间(Metaspace)替代)。
  8. -XX:MetaspaceSize: 设置元数据空间的初始大小。 重点关注
  9. -XX:MaxMetaspaceSize: 设置元数据空间的最大大小。 重点关注
  10. -XX:InitialRAMPercentage: 设置JVM初始堆内存的占用百分比。
  11. -XX:MaxRAMPercentage: 设置JVM最大堆内存的占用百分比。

合理分配JVM内存参数取决于多个因素,包括应用程序的性能需求、可用的物理内存、以及预期的并发访问量等。

一些常见的配置建议

以下是一些建议:

  1. 根据应用需求调整堆大小: 将 -Xms 和 -Xmx 参数设置为相同的值,以避免堆大小动态调整可能带来的性能开销。根据应用程序的内存需求,设置合适的堆大小,同时确保不会导致频繁的垃圾回收。

  2. 调整年轻代和老年代的比例: 通过调整 -Xmn、-XX:NewRatio 和 -XX:SurvivorRatio 参数来优化垃圾回收性能。通常情况下,年轻代的大小应该足够大,以容纳大部分的对象,从而减少频繁的Full GC。

  3. 监控和调整永久代或元数据空间大小: 如果应用程序依赖于大量的类加载或动态生成类,需要监控并根据需要调整永久代或元数据空间的大小。

  4. 考虑使用容器和云平台的资源管理功能: 如果你的应用程序运行在容器环境或云平台上,可以考虑使用平台提供的资源管理功能,如Kubernetes的资源限制和请求,以确保JVM的内存分配不会超出容器的限制。

  5. 基于监控数据进行优化: 定期监控应用程序的性能指标,包括内存使用、垃圾回收情况等,并根据监控数据进行内存参数的优化调整。

综上所述,合理分配JVM内存参数需要根据具体的应用需求和运行环境进行综合考虑,并根据实际情况进行调整和优化。

配置实践

Xmx即JVM的堆内存最大值,服务运行时还有MaxMetaspaceSize(生产环境默认是512M,测试环境默认是256M)堆外内存的占用、Linux的内核等系统内存的占用,所以Xmx一定要小于套餐内存限制的大小。 套餐为12G

  • -Xmx:设置JVM最大可用堆内存。建议为套餐内存大小的70%-80%9G左右

  • -Xms:设置JVM初始内存大小。建议Xms和Xmx一样大,绝不可以超过Xmx,否则启动报错。

  • -Xmn:设置年轻代大小。通常建议为Xmx的1/4到1/3,尽量不要超过Xmx的1/2,否则老年代比例过小容易导致频繁Full GC。其大小设置后面会有详细说明【补充:传统化上不管套餐是4G还是8G,Xmn值都是1024M】。Xmn即年轻代的大小,如果垃圾回收器使用:-XX:+UseParallelGC或者-XX:+UseConcMarkSweepGC这两种垃圾回收器,Xmn参数才会生效,如果使用-XX:+UseG1GC,Xmn不会生效,

    • Xmn尽量不超过Xmx的1/2,是因为老年代空间较小的话,年轻代长周期对象进入老年代以及大对象直接进入老年代,均可能频繁触发full GC,出现GC抖动的现象,会导致cpu使用率飙升,cpu使用受限,服务阻塞,健康检查存活检查不通过,Pod采取自救措施进行重启。
    • 如果你的应用程序生成大量的短生命周期的对象,那么可以需要将-Xmn设置得大一些。如果你的应用程序生成的对象的生命周期较长,那么你可能需要将-Xmn设置得小一些
  • -XX:MetaspaceSize配置主要看代码中是否会有大量的类对象生成,比如是否大量使用非容器控制的CGLIB技术,使用后没有加缓存,也没有清理缓存

基本配置如上,可能还会有调整

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

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

相关文章

docker desktop启动Kibana:No living connections, Error: No Living connections

Kibana启动之后一直报Kibana server is not ready yet 查看日志:No living connections, Error: No Living connections,连接ES失败! 查看配置文件内容 /usr/share/kibana/config/kibana.yml 经过一系列查找资料和尝试之后,亲测以下方法可用…

阿里二面:谈谈ThreadLocal的内存泄漏问题?问麻了。。。。

引言 ThreadLocal在Java多线程编程中扮演着重要的角色,它提供了一种线程局部存储机制,允许每个线程拥有独立的变量副本,从而有效地避免了线程间的数据共享冲突。ThreadLocal的主要用途在于,当需要为每个线程维护一个独立的上下文…

字节算法岗二面,凉凉。。。

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学,针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…

华为OD技术面算法题整理

LeetCode原题 简单 题目编号频次409. 最长回文串 - 力扣(LeetCode)3

JSONObject优雅获取深层字段属性值

开篇说明 如果在这里获得过启发和思考,希望点赞支持!对于内容有不同的看法欢迎来信交流。 技术栈 >> java 邮箱 >> 15673219519163.com 描述介绍 根据JSONObject中字段的名称,优雅获取深层属性值 使用示例,取error_entry的数量。JSON的层…

分治归并问题

“别让自我被拯救~” 谈谈归并与分治 当我们首次接触排序算法时,一定对所谓 "归并"方式排序的算法感到头疼~ 因为,我们难以形象出其不断 "分离"时,各个区域的状态。然而,即便 "归并"排序算法的学习…

新能源汽车充电桩消防安全视频智能可视化监管建设方案

一、方案背景 据应急管理部门统计公布的数据显示,仅2023年第一季度,新能源汽车自燃率就上涨了32%,平均每天就有8辆新能源汽车发生火灾(含自燃)。在已查明起火原因中,58%源于电池问题,19%源于碰…

输出当前时间

用途:在项目中一些属性中设置当前时间 实例代码 import java.time.LocalDateTime; import java.time.format.DateTimeFormatter;public class time {public static void main(String[] args){LocalDateTime china LocalDateTime.now(); DateTimeFormatter forma…

ASPICE学习笔记 ———— 过程模型(Process reference model)

文章目录 介绍过程模型Primary life cycle processes categoryAcquisition Process GroupSupply Process GroupSystem Engineering Processes GroupSoftware Engineering Processes Group Supporting life cycle processes categoryOrganizational life cycle processes catego…

动态规划算法入门

动态规划算法入门 动态规划(Dynamic Programming, DP)是一种常用的算法设计技术,它通过将原问题分解为相对简单的子问题,并存储子问题的解来避免重复计算,最终获得原问题的最优解。本文将通过实例来介绍动态规划的基本原理和思路。 一、动态规划的基本思想 动态规划的基本思…

【活动预告】本周四(3月28日)AI算法大模型备案线上活动

Al算法备案中心特邀十年合规专家「乐歌」,于本周四进行线上算法备案活动 支持AI创业者,免费咨询算法备案 3.28日20:00腾讯会议欢迎参与! 扫码添加活动助理报名参加!

c语音函数大全(T开头)

c语音函数大全(T开头) There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried about being cheated should leave quickly. 函数名…

四川宏博蓬达法律咨询有限公司:您身边的法律守护者

在快节奏的现代生活中,法律咨询服务已成为人们不可或缺的一部分。四川宏博蓬达法律咨询有限公司正是这样一个值得您信赖的法律服务伙伴。我们专注于为客户提供专业、高效、安全的法律服务,致力于成为您生活中的法律守护者。 一、专业团队,服务…

反沙箱思路总结

文章目录 反调试反沙箱时间对抗环境检测 反虚拟机黑DLL父进程检测傀儡进程后记 反调试 IsDebuggerPresent #include<windows.h> #include<stdio.h> BOOL check() {return IsDebuggerPresent(); } BOOL isPrime(long long number){if (number < 1)return FALSE…

制作一个RISC-V的操作系统七-UART初始化(UART NS16550A 规定 目标 发送数据 代码 extern)

文章目录 UARTNS16550A规定目标发送数据代码extern UART 对应到嵌入式开发中&#xff0c;qemu模拟的就是那块开发板&#xff08;硬件&#xff09; 电脑使用qemu时可以理解为qemu模拟了那块板子&#xff0c;同时那块板子与已经与你的电脑相连接了&#xff08;我们对应的指定的内…

面向大模型的低秩分解与模型压缩技术研究

1. 背景介绍 随着深度学习技术的快速发展&#xff0c;大规模神经网络模型在图像识别、语音识别、自然语言处理等领域取得了显著的成果。然而&#xff0c;这些模型通常具有极高的计算复杂度和存储需求&#xff0c;这给实际应用带来了巨大的挑战。为了克服这些限制&#xff0c;研…

【Linux】命令拾遗

Note: 记录在学习过程容易遗忘、混淆的Linux命令 1. 重定向 >和>>都是输出重定向&#xff0c;区别是>会覆盖而>>是追加。 <是输入重定向&#xff0c;例如&#xff1a;command < file&#xff0c;会将 file 中的内容作为 command 命令参数。 1>正…

水牛社五大赚钱栏目概览:轻松了解项目核心与赚钱原理

很多新用户首次访问水牛社官网时&#xff0c;可能会感到有些迷茫。由于软件介绍相对较长&#xff0c;部分朋友可能缺乏耐心细读。然而&#xff0c;若您真心希望在网络上找到赚钱的机会&#xff0c;深入了解我们的发展历程将大有裨益。简而言之&#xff0c;本文旨在快速带您领略…

Nginx专栏分享

这里给大家分享一个其他博友的专栏&#xff0c;很不错&#xff1a; https://blog.csdn.net/wzj_110/category_9072895.html

二刷代码随想录算法训练营第三十一天 | 455.分发饼干 376. 摆动序列 53. 最大子序和

目录 一、455. 分发饼干 二、376. 摆动序列 三、53. 最大子数组和 贪心理论&#xff1a;模拟感觉可以局部最优推出整体最优&#xff0c;而且想不到反例&#xff0c;那么就试一试贪心。 一、455. 分发饼干 题目链接&#xff1a;力扣 文章讲解&#xff1a;代码随想录 视频讲…