频繁full GC排查

news2025/4/16 7:23:41

场景:通过prometheus去拉取通过actuator组件暴露的端点中的JVM相关指标。通过告警规则,检测线上服务出现频繁full gc。

((jvm_gc_pause_seconds_count{action="end of major GC",cause!="Heap Dump Initiated GC"}- jvm_gc_pause_seconds_count{action="end of major GC",cause!="Heap Dump Initiated GC"} offset 1d) >2)
 or
((jvm_gc_pause_seconds_count{action="end of major GC",cause!="Heap Dump Initiated GC"}-min_over_time(jvm_gc_pause_seconds_count{action="end of major GC",cause!="Heap Dump Initiated GC"}[1d])>2) and (jvm_gc_pause_seconds_count{action="end of major GC",cause!="Heap Dump Initiated GC"}- jvm_gc_pause_seconds_count{action="end of major GC",cause!="Heap Dump Initiated GC"} offset 1d <=0))

告警通知:JVMFullGcCountTooMuch

说明:一天内full GC次数>2次

频繁full GC可能存在GC参数配置不当、内存泄露等问题。

获得full GC发生频率以及暂停时间情况

查看GC情况:
jstat -gc [pid]

发生频率:

  • 周期性 | 常发 | 偶发

暂停时间:

  • 一次full GC处理时间是否过长:一般一次Full GC的耗时应该在几百毫秒,不超过1s。

Full GC的原因

Prometheus监控中获得常见的full GC 原因:

topk(3,sum(increase(jvm_gc_pause_seconds_count{application="应用名称",action="end of major GC"}[1d]))by (cause,application))
  • Ergonomics : JVM自动调节Heap导致GC。(可能情况:进行Minor GC时,如果判断老年代最大可用的连续空间不足于存储新生代所有对象总空间,就会触发Full GC)。
  • Allocation Failure : 内存分配失败。
  • Metadata GC Threshold :元数据占用内存超过了阈值,元空间不足。
  • Heap Dump Initiated GC : 进行Dump heap时触发的。(可以忽略)
    这里主要涉及的都是堆内存分配问题。

JVM 内存占用情况

需要查看的内容:

  • Full GC后内存是否有释放。
  • GC内存配置情况。
  • 内存占用最大值和最小值、老生代的占用情况等。
#  PromQL查询监控中full 内存占用曲线
jvm_memory_used_bytes{area="heap",id="PS Old Gen"}

# 查看JVM配置
jcmd <pid> VM.flags 

通过图表GC内存占用堆内存占用率分析堆内存使用是否过高。
Full GC的出现与Metadata GC Threshold有关,可查看Metaspace内存占用情况,如果Metaspace区域的内存稳定上升、波动范围合理、不频繁触发Full GC则不用特殊处理。如果由于系统一次性加载过多数据进内存,可能会导致频繁有大对象进入老年代,从而触发Full GC。则需要调大Survivor区,可以考虑增加JVM启动参数中的MetaspaceSize值。
一般的应用,XMX可以设置为物理内存的1/2~2/3。需要较多地使用Heap外内存应用,物理内存不要超过1/2,例如ES、Kafka等中间件,需要大量读写文件,操作系统需要大量的Page Cache,才能有足够的缓存提高性能,所以JVM Heap不要过大,以预留给非Heap的其他内存。
-XX:MaxMetaspaceSize 参数设置了元空间的最大大小。元空间会根据需要动态扩展,但不会超过这个设置的最大值。当元空间使用量超过这个值时,JVM 将触发 Full GC(也会附带younggc),尝试回收不再需要的类元数据以及相关资源。

如果发现堆内存使用过高或者出现长时间的Full GC,可能需要获取dump文件进一步分析内存泄露可能性。

查看其它监控数据

了解系统是否承载高并发请求或处理数据量过大。如果是这种情况,可以尝试优化系统性能,提高并发处理能力,或者增加服务器数量来分担负载。

# QPS
sum(rate(http_server_requests_seconds_count[1m]))
# CPU
system_cpu_usage
...
获得heap dump文件

文章开头有说使用actuator暴露监控指标,也能通过actuator获得heap dump文件

# 添加heapdump,用于开发heapdump端点
management.endpoints.web.exposure.include=health,prometheus,heapdump

更新完成后通过/actuator/heapdump下载dump文件(文件类型为.hprof)

也可以配置:

可以通过配置JVM启动参数来获得dump文件用于分析问题:
1. Heap Dump
生成堆转储快照:
- -XX:+HeapDumpOnOutOfMemoryError
- -XX:HeapDumpPath=./logs/heapdump.hprof
OOM时会自动Dump堆到指定路径。
2. Thread Dump
生成线程Dump快照:
- -XX:+HeapDumpOnOutOfMemoryError
- -XX:HeapDumpPath=./logs/heapdump.hprof
OOM时会自动Dump线程信息到指定路径。

分析dump文件,看是否有大对象持续创建或频繁加入等情况

推荐使用:Eclipse Memory Analyzer(MAT) 工具进行分析。
(下载地址 https://www.eclipse.org/mat/downloads.php )
在这里插入图片描述

将下载的文件dump文件通过mat打开:
在这里插入图片描述

选择默认的“Leak Suspects Report
在这里插入图片描述

获得内存泄露分析报告
在这里插入图片描述
在这里插入图片描述

从示例图中可看出,存在一个可疑问题:在“XXXService”中可能存在一个ConcurrentHashMap大对象,占用41.92 MB。
建议优化该Service中的程序。

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

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

相关文章

显示屏没有信号monitor no signal from device

双屏幕总是有个屏幕连接不上&#xff0c;显示没有信号。 环境 win11 Dell dual monitor双屏 解决方法 检查电源有没有插好&#xff0c;HDMI或DP线有没有插好。如果仍然出现这个情况&#xff0c;试着更新一下驱动。 如果还是点不亮&#xff0c;那么关掉亮的那个显示屏。用…

前端开发技术栈(工具篇):详细介绍npm、pnpm和cnpm分别是什么,使用方法以及之间有哪些关系

目录 npm、pnpm和cnpm分别是什么 npm pnpm cnpm NPM包管理器 使用npm管理&#xff0c;创建/初始化项目 修改npm镜像&#xff08;npm源设置&#xff09; 基本命令 安装依赖项 下载特定版本的依赖 下载开发依赖 下载全局依赖&#xff08;全局安装&#xff09; 升级依…

redis分布式锁的应用

redis 作为分布式锁的东西 分布式锁的应用 redis,zk,数据库这些都可以实现分布式锁 我们今天主要基于redis实现的分布式锁&#xff0c;而且要求性能要好 基于一个小的业务场景来说&#xff0c;就比如说秒杀中的减库存&#xff0c;防止超卖这种代码就会有并发问题,比方说3个线程…

C++动态规划算法的应用:得到 K 个半回文串的最少修改次数 原理源码测试用例

本文涉及的基础知识点 动态规划 题目 得到 K 个半回文串的最少修改次数 给你一个字符串 s 和一个整数 k &#xff0c;请你将 s 分成 k 个 子字符串 &#xff0c;使得每个 子字符串 变成 半回文串 需要修改的字符数目最少。 请你返回一个整数&#xff0c;表示需要修改的 最少…

VS Code打造Julia IDE

文章目录 运行和调试Workspace绘图选项卡代码编辑 搜索并下载Julia插件后&#xff0c;左侧工具栏会出现Julia的三圆图标&#xff0c;点进去之后分为Workspace, Documentation以及Plot navigator三个子窗。 运行和调试 打开.jl文件后&#xff0c;其右上角会出现一个三角形的符…

【洛谷算法题】P3954-成绩【入门1顺序结构】

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P3954-成绩【入门1顺序结构】&#x1f30f;题目背景&#x1f30f;题目描述&#…

【1++的Linux】之文件(三)

&#x1f44d;作者主页&#xff1a;进击的1 &#x1f929; 专栏链接&#xff1a;【1的Linux】 文章目录 一&#xff0c;磁盘结构二&#xff0c;磁盘的抽象结构三&#xff0c;文件系统四&#xff0c;文件的增删查改五&#xff0c;软硬链接六&#xff0c;动静态库1. **动态库和静…

Socket实现服务器搭建

一、前言&#xff1a; Socket上篇文章已经介绍过了 他是实现网络编程的基础 。 在服务器模型中通常都是多个客户端一个服务器端&#xff0c;那么服务器是如何处理多个客户端的请求&#xff1f; 1.顺序处理 依次处理--效率低下 2.并发处理 2.1 多线程并发&#xff08;线程池…

《向量数据库》——Zilliz X Dify.AI ,快速打造知识库 AI 应用

Zilliz 大模型生态矩阵再迎新伙伴!近日,Zilliz 和 Dify.AI 达成合作,Zilliz 旗下的产品 Zilliz Cloud、Milvus 与开源 LLMOps 平台 Dify 社区版进行了深度集成。 01. Zilliz Cloud v.s. Dify Dify 作为开源的 LLMs App 技术栈,在此前已支持丰富多元的大型语言模型的接入,…

解密Java中神奇的Synchronized关键字

文章目录 &#x1f389; 定义&#x1f389; JDK6以前&#x1f389; 偏向锁和轻量级锁&#x1f4dd; 偏向锁&#x1f4dd; 轻量级锁&#x1f4dd; 自旋锁&#x1f4dd; 重量级锁&#x1f525; 1. 加锁&#x1f525; 2. 等待&#x1f525; 3. 撤销 &#x1f389; 锁优化&#x1f…

将字符串中的数据按指定分隔符分割依次存入一维数组中 numpy.fromstring()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将字符串中的数据 按指定分隔符分割 依次存入一维数组中 numpy.fromstring() [太阳]选择题 请问以下代码中执行语句输出结果依次是&#xff1f; import numpy as np str1 "1.0 2.0 3.…

力扣第55题 跳跃游戏 c++ 贪心 + 覆盖 加暴力超时参考

题目 55. 跳跃游戏 中等 相关标签 贪心 数组 动态规划 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &…

【算法训练-动态规划 四】【子序列类型问题】连续子数组的最大和

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【动态规划】&#xff0c;使用【数组】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

架构设计系列5:如何设计高可用架构

#1024程序员节&#xff5c;参与投稿&#xff0c;赢限定勋章和专属大奖# 当今的数字时代&#xff0c;高可用架构已经成为了现代应用和服务的基石。无论是企业级应用、云计算平台还是互联网服务&#xff0c;高可用性都是确保系统在面临各种挑战时保持稳定运行的关键要素。 本文…

计算机算法分析与设计(19)---回溯法(装载问题)

文章目录 1. 题目描述2. 算法思路3. 代码编写 1. 题目描述 2. 算法思路 1. 思路&#xff1a; 容易证明&#xff0c;如果一个给定装载问题有解&#xff0c;则采用下面的策略可得到最优装载方案。 (1) 首先将第一艘轮船尽可能装满。(2) 将剩余的集装箱装上第二艘轮船。 2. 将第一…

基于springboot实现基于Java的超市进销存系统项目【项目源码+论文说明】

基于springboot实现基于Java的超市进销存系统演示 摘要 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;超市进销存系统也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#x…

Xilinx的FIR滤波器IP的设计与仿真

平台&#xff1a;Vivado2021.1 芯片&#xff1a;xcku115-flva1517-2-i (active) 语言&#xff1a;VerilogHDL 参考文件&#xff1a;pg149.下载地址 FIR Compiler LogiCORE IP Product Guide • FIR Compiler (PG149) • 阅读器 • AMD 自适应计算文档门户 (xilinx.com) FI…

【漏洞复现】panalog日志审计系统任意用户创建漏洞和后台命令执行

漏洞描述 panalog为北京派网软件有限公司,一款流量分析,日志分析管理的一款软件。存在任意用户创建漏洞和后台命令执行漏洞,可先通过任意用户创建,然后进行后台命令执行,获取服务器权限。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公…

怎么保护公司文件安全

怎么保护公司文件安全 无纸化办公时代&#xff0c;无论是企业还是个人在生活的方方面面都依赖于对电子化软件以及设备的使用。尤其是对于企业而言&#xff0c;在日常办公中产生的相关电子文件都是以电子文档的形式存储在电脑上。 下载试用安企神数据防泄密软件 若企业未实施…

力扣刷题 day53:10-23

1.二进制表示中质数个计算置位 给你两个整数 left 和 right &#xff0c;在闭区间 [left, right] 范围内&#xff0c;统计并返回 计算置位位数为质数 的整数个数。 计算置位位数 就是二进制表示中 1 的个数。 例如&#xff0c; 21 的二进制表示 10101 有 3 个计算置位。 方…