JVM优化--优化gc

JVM 性能调优之内存优化与 GC 优化 一、注册中心 策略:服务注册原理、注册中心结构、zookeeper的原理、几个注册中心的区别、分布式算法、分布式事务。 项目细节:服务注册、服务发现、服务注销、监听机制 介绍一下服务注册中心怎么做的? (1)服务发现: 服务注册/反注册:保存服务提供者和服务调用者的信息 服务订阅/取消订阅:服务调用者订阅服务提供者的信息,最好有实时推送的功能 服务路由(可选):具有筛选整合服务提供者的能力。 (2)服务配置(不包括其它无关配置): 配置订阅:服务提供者和服务调用者订阅微服务相关 阅读详情

什么时候需要排查gc问题

我们遇到什么样的现象会怀疑gc有问题,进而优化呢?gc问题大体上可以分为两类:内存溢出、gc不健康。
内存溢出一般会借助dump文件进行查看,设置jvm参数-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/applogs/system/error.dump可以在发生oom时给出dump信息。有了dump信息可以使用MAT,Jprofile,jvisualvm 进行排查。
gc不健康主要表现在这么几个方面:young gc频繁或者不频繁,理想频率是5s一次,一次50ms以内。old gc理想频率是一天一次。这个参数根据应用的重要性、tps等会有不同的要求。例如我司的大多数RPC接口要求50ms以内响应,白天不允许发生full gc(发生full gc会stop the world,造成接口响应时间变长,容易引发短时间内大量接口超时。)
总结一下,当遇到OOM报错、服务有突刺、间歇性的超时等问题时,我们需要查看一下gc情况是否合理,即时调整。

gc不正常的原因

当发现gc情况跟我们上面说的指标不太一致时,可以尝试用这几个方面去分析原因。
young gc不正常原因一般是堆空间大小设置不合理,也有可能大对象直接进入老年代等。
old gc不正常可能原因有
1: Old 区内存不够;
2:元数据区内存不够;
3:System.gc();
4:jmap 或者 jcmd;
5:CMS Promotion failed 或者 concurrent mode failure;
6:JVM 基于悲观策略认为这次 YGC 后 Old 区无法容纳晋升的对象,因此取消 YGC,提前 FGC。

排查思路

1.分析gc问题,我们首先需要知道配置的jvm参数,jdk版本等信息。然后分析jvm参数的合理性,有初步的方向。
2.通过查看堆内存信息,了解堆内存的使用情况。
3.如果有监控工具,可以观察GC异常时间内,系统的调用情况。
4.结合GC日志进行排查。

实战演练

某应用最近进行重大升级,用户访问量扩大10倍,开发同事持续进行了两个月高强度的开发终于上线了。上线后总体平稳,但出现了两波超时。
当时没太当回事,超时发生在1分钟以内,且没有持续超时。以为是服务突刺、网络问题等导致的,没有跟踪。
第二天又发生了一次,这引起了我们的重视,想到可能有gc问题。
通过观察公司监控平台,发现对应时间点发生了full gc(如果公司缺少这样的监控平台,通过分析gc日志也能看出来,我们的垃圾回收器用的CMS+parnew,在gc日志里面搜索CMS可以看到full gc的情况,搜索GC (Allocation Failure))可以看到young gc的情况。young gc的情况一分钟15次左右,耗时比较短。
检查了一下JVM参数配置,指令是ps -ef|grep java 。由于我们的应用是部署在docker镜像上,一个镜像只部署了一个应用,这样找出来的就是我们的应用JVM配置。
观察到两个问题,没有设置元空间大小,老年代空间太小了,只有500M。
公司运维默认设置年轻代:老年代3:1,总共2G内存。调整为元空间默认256M,最大512M,年轻代1228M,老年代800M。
调整后重新部署效果很好,基本不会产生full gc,年轻代的GC情况也还正常。

JVM 性能调优之内存优化与 GC 优化实战 GC 调优是个很复杂、很细致的过程,要根据实际情况调整,不同的机器、不同的应用、不同的性能要求调优的手段都是不同的,这些都需要平时去积累,去观察,去实践。一般调优的思路:记录好日志。对程序做好性能监控。根据日志和性能监控数据修改程序。使用专业工具通过不同的 JVM 参数进行压测并获得最佳配置。 阅读详情

相关推荐

路由工具之策略路由policy-based-routing、MQC三板斧流分类、流行为、流策略

PBR(Policy-Based Routing,策略路由)策略路由可理解为控制路由,因为PBR策略的优先级高于传统路由表的转发,所以它主要用于影响数据包转发的技术。

Hades_Ling的优快云博客 5582

Young GC过于频繁

YoungGC频繁一般是内存问题,在优化代码降低频率的同时,也需关注某个时间段的累计耗时。总的来说,在CPU Quota允许的范围内,GC总耗时越少越好,GC频率反倒不是那么重要。展开: JVM / 内存 / GC / ClassLoader这一行,找到监控面板:GC耗时 和 GC原因与频次。Young GC过于频繁,说明JVM内存分配压力大,可能是Young区比较小或者代码加载到内存的数据过多。Young GC频繁,通常不用立即处理,大多需要优化代码。可参考原因部分,优化代码,调整GC参数。

厚积薄发 7804

rsyslog交叉编译(armv7、armv8、aarch64、arm32平台通用)

该文档描述了如何交叉编译rsyslog到arm64嵌入式平台。

sinat_33909696的博客 1560

JVM调优--经验总结

本文介绍JVM调优的一些常用经验。

IT利刃出鞘的博客 5433

本地化部署dify,使用Database插件实现dify直连数据库报错No module named ‘MySQLdb‘解决方案

网上查阅各种资料,有说修改/dify-main/docker/volumes/sandbox/dependencies目录下的python-requirements.txt文件,添加了如下两行,试验后无效。,看到有人是其他报错,但是URI配置如下(在mysql后面加了pymysql),尝试后果真成功了。按照系统提示设置完数据库URI后保存出现错误。在工具市场查询Database,点击后进行授权。最后在该插件的项目地址获得灵感。

qiaoxu1989的博客 4333

ARM双核锁步DCLS Lockstep技术研究(FPGA实现)

基于《Applying Dual-Core Lockstep in Embedded Processors to Mitigate Radiation-induced Soft Errors》文章总结 RISC-V双核锁步DCLS Lockstep技术参考之前文章: RISC-V双核锁步DCLS Lockstep技术总结_远古架构师alanwu的博客-优快云博客https://blog.youkuaiyun.com/heyuming20062007/article/details/123329537ARM+RIS

heyuming20062007的博客 8727

jvm调优一(工具使用)

jvm之调优

简单,快乐,拥抱变化 1390

大模型复杂问答能力评测框架:从原理到实践

在人工智能领域,大语言模型(LLM)的评估是衡量其实际应用价值的关键环节。其核心原理在于通过系统化的评测框架,对模型的理解、推理、整合与表达能力进行量化分析。传统的NLP基准测试往往侧重于事实性检索或简单推理,难以全面反映模型在应对多跳推理、隐含条件、长上下文整合等复杂现实任务时的真实性能。因此,专门针对复杂问答设计的评测技术应运而生,其价值在于为模型选型、效果优化和瓶颈诊断提供数据驱动的科学依据。该技术广泛应用于需要深度逻辑判断的业务场景,如智能投顾、法律咨询、医疗诊断等。本文聚焦的`tan92hl/Co

weixin_28679635的博客 362

yongGC和FullGC多长时间执行一次比较好

1.yongGC 执行时间不超过50ms 执行频率不小于10s每次 2.FullGC 执行时间不超过1s执行频率不低于10分钟

佐杰的博客 7352

链路状态路由协议 OSPF (一)

本章将会学习链路状态路由协议OSPF,理解OSPF的基本概念,工作原理,掌握OSPF配置基本命令。本章重点,OSPF的基本概念,OSPF配置。

yj11290301的博客 3475

YOLOv11 改进入门篇 | 轻量级涨点技巧:GhostConv 替代普通卷积的实战指南

摘要: 本文介绍如何通过GhostConv改进YOLOv11,实现轻量化涨点。YOLOv11深度增加导致参数量、延迟和内存占用上升,GhostConv通过“本征特征+线性变换”策略,在精度几乎无损的情况下降低30%-50%计算量。文章详细解析GhostConv原理,对比普通卷积的参数量和FLOPs优势,并提供完整的代码级改造流程,包括模块实现、注册及网络配置。实验表明,该方法有效提升边缘端推理效率,适用于移动端等资源受限场景。

shrgegrb的博客 1656

jvm gc合适时间

1.yongGC 执行时间不超过50ms 执行频率不小于10s每次。2.FullGC 执行时间不超过1s执行频率不低于10分钟。

oZiSeFengYe1的专栏 3447

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

JVM优化之GC

JVM中的GC优化是一个复杂而关键的任务。通过深入理解GC的基本原理与算法、选择合适的垃圾回收器、调整堆内存大小与比例、启用GC日志与分析、优化代码与数据结构以及持续监控与调优等措施,可以显著提高Java应用程序的性能和稳定性。同时,也需要注意避免内存泄漏、平衡吞吐量与响应时间以及考虑硬件与操作系统差异等挑战。

vangoghlaam的博客 891

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

JVM GC优化

查看JVM的GC过程 在启动你的程序的时候,使用-verbose:gc 参数,将程序的 GC情况输出至 log 文本文件中。对log 文件进行简要分析。 输入的参数为“-verbose:gc -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails”将日志文件输入到gc.log中并且打印时间戳和GC的详细信息。 输出的gc.log...

DYC的博客 2791

JVM Full GC 优化指南

摘要:频繁Full GC会导致应用暂停,影响服务稳定性。本文提供系统化排查流程:1)通过堆转储分析内存泄漏;2)调优JVM参数,包括堆内存分配、GC器选择和元空间配置;3)代码优化如避免大对象、及时释放资源。配套介绍了jmap、MAT等工具的使用方法,并附流程图指导问题定位。建议优先解决内存泄漏,再针对性调整参数,从根源减少GC问题。

qq_39126115的博客 1635

[jvm]频繁full gc怎么优化

前言 今天被问到,如果频繁full gc怎么排查,怎么优化? 服务要怎么来手动触发full gc呢? 盲猜 频繁fullgc,那肯定是老年代不够用了; 所以要么就是有巨大对象老是塞进去,要么就是老年代的碎片严重; 使用工具抓一下内存,分析一下,哪些对象是最多的,是否合理。 老年代大小参数设置错误; 分析 如果是一次fullgc后,剩余对象不多。那么说明eden区设置太小,导致短生命周期的对象进入了old区。 如果一次fullgc后,old区回收率不大,那么说明old区太小。

新一的技术笔记 3946

JVM GC算法原理与优化

在深入探讨Java虚拟机(JVM)的垃圾回收(GC)算法之前,让我们先设想一个场景:一个大型企业级应用,它每天处理着数以亿计的用户数据。随着业务量的不断增长,系统内存逐渐被大量无用的对象占据,导致频繁的内存溢出错误,严重影响了系统的稳定性和性能。这种情况下,垃圾回收算法的重要性不言而喻。垃圾回收算法是JVM中一个核心的知识点,它负责自动回收不再使用的对象占用的内存,从而避免内存泄漏和溢出问题。在Java应用中,内存管理是一项至关重要的任务,而GC算法正是实现这一任务的关键技术。

我是Java程序员廖志伟,感谢朋友们的支持! 1250

JVM性能调优之内存调优与GC优化

JVM 性能调优之内存优化与 GC 优化 JVM 调优是一个系统而又复杂的过程,但我们知道,在大多数情况下,我们基本不用去调整 JVM 内存分配,因为一些初始化的参数已经可以保证应用服务正常稳定地工作了。 在应用服务的特定场景下,JVM 内存分配不合理带来的性能表现并不会像内存溢出问题这么突出。一般你没有深入到各项性能指标中去,是很难发现其中隐藏的性能损耗。 压测工具 AB Ab(ApacheBench) 测试工具是 Apache 提供的一款测试工具,具有简单易上手的特点,在测试 Web 服务时非常实用。

bug_come的博客 1105

JVM内存结构、JVM GC的优化策略、实践优化总结

当Java程序性能达不到既定目标,且其他优化手段都已经穷尽时,通常需要调整垃圾回收器来进一步提高性能,称为GC优化。但GC算法复杂,影响GC性能的参数众多,且参数调整又依赖于应用各自的特点,这些因素很大程度上增加了GC优化的难度。即便如此,GC调优也不是无章可循,仍然有一些通用的思考方法。 优化前准备: 简单回顾JVM相关知识、介绍GC优化的一些通用策略。 优化方法: 介绍调优的一般流程:明确...

豆腐的魔法屋 436

JVM Full GC 频繁问题排查、优化及解决方案

JVM频繁Full GC问题是Java应用性能调优中常见且重要的挑战。本文系统地分析了导致频繁Full GC的各种原因,包括内存泄漏、高并发、大对象分配、内存碎片化等,并提供了详细的排查方法和优化建议。JVM参数调优:合理配置堆内存大小、分代比例、垃圾收集器等参数,使其适合应用特性。代码层面优化:减少不必要的对象创建,避免内存泄漏,优化数据结构和算法,合理管理资源。架构层面优化:实现流量控制,优化线程模型,改进数据处理方式,提高系统整体效率。监控与预警:建立完善的监控体系,及时发现潜在问题,防患于未然。

weixin_56018532的博客 3620

JVM调优、GC优化思路与问题解决方法

JVM调优与案例介绍 Java、大数据开发学习要点(持续更新中…) 文章目录JVM调优与案例介绍 解决问题的关键一步总是预防问题的出现: 虚拟机启动时内存参数设置:设定合适的内存空间给虚拟机Xms、Xmx,预留合理的内存空间,为后续可能出现的问题发现解决预留内存空间,如jmap、jstat、jstack等命名。 虚拟机垃圾回收器选择:通过垃圾回收器参数调优可以发现,实际上一般情况下默认的垃圾回收器参数就是最优的。而不同场景下的垃圾回收器组合对垃圾回收性能的影响是比较大的。如吞吐量优先的Para

weixin_38836273的博客 1629

gc java内存模型优化_JVM内存模型、GC、优化建议

JVM内存结构JVM内存由堆、栈、本地方法栈、方法区、程序计数器组成内存结构如下所示,s0是survivor from空间 ,s1是survivor to空间1)堆所有执行的new对象操作都会在堆中分配一块存储空间。堆被划分为新生代和老生代,新生代又被划分为Eden和survivor两部分,其中survivor又被划分为from space和to space。新生代:所有new的对象首先在eden...

weixin_36350479的博客 673
上一篇: RocketMQ问答
下一篇: 项目中的常用注解(二)
wu_yangchun
博客等级 码龄14年 10粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值