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 参数进行压测并获得最佳配置。 阅读详情

相关推荐

告别官方WebRTC的30G编译:我用libdatachannel给USB摄像头做了个轻量级网页监控

本文介绍了一种基于libdatachannel的轻量级WebRTC监控方案,通过USB摄像头实现实时视频推流。相比官方WebRTC库30GB的庞大编译体积,libdatachannel仅需几十MB,大幅简化了开发流程。文章详细讲解了从视频采集、FFmpeg编码到WebRTC传输的全过程,并提供了性能优化和部署方案,帮助开发者快速构建高效的网页监控系统。

weixin_29207533的博客 533

Young GC过于频繁

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

厚积薄发 7804

Eplan2022 复制已有的宏文件生成新的原理图宏文件

Eplan2022 新建原理图宏文件

haier123888的博客 1万+

JVM调优--经验总结

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

IT利刃出鞘的博客 5433

前馈神经网络求解XOR问题

摘要 前馈神经网络是一种最简单的神经网络,各神经元分层排列。每个神经元只与前一层的神经元相连。接收前一层的输出,并输出给下一层.各层之间没有反馈。是目前应用最广泛、发展最迅速的人工神经网络之一。研究从20世纪60年代开始,目前理论研究和实际应用达到了很高的水平[1]。本节通过设计包含输入层、一个隐含层和输出层的前馈神经网络,实现XOR运算,并基于计算数据或实验数据分析隐含层决策面的特点,进而总结前馈神经网络隐含层的作用。 1.1 神经网络结构设计 1.1.1 XOR问题描述 ...

sinat_28178805的博客 2358

VIL-SLAM论文翻译:Stereo Visual Inertial LiDAR Simultaneous Localization and Mapping

文章目录写在前面摘要1.引言2.相关工作3.系统概述4.视觉前端5.双目视觉惯性里程计A. IMU预积分因子B. 非结构化视觉因子C. 优化和边缘化6. 激光建图A. LiDAR扫描去畸变B. 帧到地图配准7. LiDAR增强的闭环A. 回环检测B. 回环约束C. 全局位姿图优化D. 重定位8. 实验结果A.平台和软件B.测试和结果C. EuRoCMAV数据集测试9.结论 写在前面 写作参考: robot L 开源代码: 开源代码链接 论文原文: 原文链接 摘要 SLAM是移动和空中机器人的一项基本任务

JaydenQ的博客 2321

jvm调优一(工具使用)

jvm之调优

简单,快乐,拥抱变化 1390

保边滤波之Mean shift filter

保边滤波之Mean shift filter 目录 保边滤波之Mean shift filter 一、算法原理 二、练手实现的算法代码如下: 三、实现结果 一、算法原理 在OpenCV中,meanshift filter函数为 p...

大熊 1561

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

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

佐杰的博客 7352

华为OD机试真题2026双机位C卷 C语言 实现【明日之星选举】

给定一组选票votes。votes[i]代表第 i 张选票的内容,包含一个字符串"zhangsan,hanmei",表示推荐zhangsan为明日之星,反对 hanmei 称为明日之星。赞成或反对使用逗号(,)分割。 给定一个数组n,表示最后将筛选出赞成票最多的n个人,如果赞成票相同,则反对票越少,排序越靠前;如果赞成票和反对票都相同,则按照姓名字典序升序排序。

MISAYAONE的博客 184

用 ABAP EML 驾驭 RAP 业务对象:从事务缓冲区到落库提交的一条龙实践

摘要:ABAP EML(Entity Manipulation Language)是SAP RAP框架的核心语言能力,为ABAP开发者提供强类型、批处理友好的方式操作RAP业务对象。EML通过事务缓冲区管理数据变更,支持读取(READ ENTITIES)、修改(MODIFY ENTITIES)及事务控制(COMMIT/ROLLBACK ENTITIES)。其特点包括:基于BDEF派生类型确保类型安全,%control和%cid等特殊字段实现精细控制,统一的消息模型便于错误处理。相比传统ABAP数据访问方式,

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 952

jvm gc合适时间

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

oZiSeFengYe1的专栏 3447

智能交通实战:基于YOLOv5/8/10的车辆违章行为检测系统(违停/压线/逆行识别)

在开始模型训练前,我们得明确要检测的违章行为,还要准备好对应的数据集,这就像做饭前要确定做什么菜、准备什么食材一样。通过本指南,你已经掌握了从技术选型(YOLOv5/8/10)数据准备模型训练到UI界面开发的全流程,搭建了一套完整的车辆违章行为检测系统。这个系统在实际应用中,能有效识别多种车辆违章行为,检测准确率高、速度快,可用于智能交通管理、停车场管理等多个场景。随着深度学习技术的不断进步,YOLO系列模型在车辆违章检测领域的应用会越来越广泛。

m0_71589036的博客 461

JVM优化之GC

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

vangoghlaam的博客 891

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

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

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

JVM Full GC 优化指南

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

qq_39126115的博客 1635

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

[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、付费专栏及课程。

余额充值