首页 > 系统相关 >记录一次内存泄漏排查

记录一次内存泄漏排查

时间:2024-10-21 20:46:13浏览次数:7  
标签:10 ClusterNode 泄漏 2024 排查 限流 内存 sentinel

事件描述

order服务出现频繁GC告警,app卡顿

事件回顾

【2024-10-21 08:20:04】order出现频繁GC告警

【2024-10-21 09:24:04】通过命令jmap -histo:live [pid]查看存活对象发现sentinel统计对象占用大量内存

【2024-10-21 10:33:04】dump下堆内存信息

【2024-10-21 10:35:04】版本由2.7.0回退到2.4.0并通知到流控群。

事件回顾(排查分析)

【2024-10-11 15:57:00】根据dump的堆内存信息排查top5对象

 

查询引用发现LongAdder最终被ClusterNode的originCountMap引用,并且这个map存储很多元素

 

 

结合OQL进行针对性搜索ClusterNode并查看属性值。发现很多此类大对象

 

结合官方文档查看ClusterNode是干嘛

 

 

结合源码查看

com.alibaba.csp.sentinel.node.ClusterNode#getOrCreateOriginNode

 

最终导致服务内存得不到释放,频繁FullGC 导致用户卡顿

结论

sentinel二期增加了来源限流,支持根据客户端ip进行拉黑和限流.使用alibaba Adapter做扩展

com.alibaba.csp.sentinel.adapter.spring.webmvc.AbstractSentinelInterceptor#preHandle

 

com.yxt.starter.sentinel.spring.web.YxtCustomRequestOriginParser#getOrigin

 

因为直接面向用户的接口,前端存在轮询接口,用户手机网络ip随着位置移动基站变更,资源随着客户端ip变更和大量用户访问导致资源的计数器持续累加并且得不到释放。

事件影响

所有app用户使用app卡顿。

 

改进措施

针对来源限流,应先判断此接口是否有配置限流和黑白名单规则,并且这个客户端ip是否配置了限流和黑名单规则,如果未配置则不进行来源访问的统计

 

判断规则是否存在

 

标签:10,ClusterNode,泄漏,2024,排查,限流,内存,sentinel
From: https://www.cnblogs.com/LQBlog/p/18490319

相关文章

  • [20241021]使用gdb查看修改内存地址以及相关值.txt
    [20241021]使用gdb查看修改内存地址以及相关值.txt--//执行oradebugpoke报错,感觉oracle已经禁止这类hack操作。1.环境:SYS@book>@ver2==============================PORT_STRING                  :x86_64/Linux2.4.xxVERSION              ......
  • podman 无根用户分配系统CPU、内存等系统资源,提示cgroup相关权限不足
    问题:在使用Podman以无根用户(rootless)模式创建容器时,如果遇到分配系统CPU等资源时提示cgroup权限不足,这是因为无根用户没有直接访问cgroup相关资源的权限。以下是一些解决方法(目前采用的办法3临时解决,,主要是更改系统目录权限sudochown-R$USER:$USER/sys/fs/cgro......
  • 揭秘PostgreSQL的隐藏奥秘:物理、内存与进程模型的深度解析与高效优化策略
    引言PostgreSQL作为一款强大的开源关系型数据库管理系统,以其灵活性、高性能和丰富的功能特性在全球范围内受到广泛欢迎。其底层架构的精心设计,使其在处理复杂查询、支持多种数据类型和高并发用户访问时表现出色。理解PostgreSQL的底层架构不仅有助于提升系统性能,还能帮助开......
  • oom排查与jvm部门知识
    1)什么是OOM?OOM,全称“OutOfMemory”,翻译成中文就是“内存用完了”,来源于java.lang.OutOfMemoryError。看下关于的官方说明:ThrownwhentheJavaVirtualMachinecannotallocateanobjectbecauseitisoutofmemory,andnomorememorycouldbemadeavailablebyt......
  • 流量抓包和网络问题排查,网工不要只会Wireshark,用好TCPdump才是大神!
    你好,这里是网络技术联盟站,我是瑞哥。在网络工程师的日常工作中,流量抓包和网络问题的排查是不可或缺的一环。Wireshark作为图形界面强大的流量分析工具,深受众多网络工程师的喜爱。然而,仅仅依赖Wireshark并不足以成为一个真正的网络排查高手。真正的网络大神往往能熟练运......
  • C++基础与实用技巧第三课:内存管理与性能优化
    第二章:C++基础与实用技巧第三课:内存管理与性能优化1.动态内存的管理策略与技巧动态内存管理是C++编程的核心部分之一,合理管理内存可以极大提高程序的性能和稳定性。在C++中,动态内存的分配和释放通常使用new和delete运算符,但由于手动管理内存容易引入错误,因此建议使用现代C+......
  • vue3 ref 或者reactive被赋值其他对象数据,用的是同一块内存,而不是深拷贝
    <template><divclass='box'>{{abcDemo?.a?.b?.c}}<button@click="changeAbc">ChangeABC</button><div>{{abdDemo?.a?.b?.c}}</div></div></template><sc......
  • 七,JVM内存划分与参数传递
    Java编程基础:JVM内存划分与参数传递在Java编程中,了解Java虚拟机(JVM)的内存划分对于优化程序性能和资源管理至关重要。本文将详细探讨JVM内存的划分以及参数传递的机制,并提供图示以帮助理解。JVM内存划分JVM内存主要划分为以下几个区域:栈(Stack)局部变量:存储方法内部定义的局部......
  • Java的内存模型
    硬件效率的一致性======================================================================随着硬件技术的发展,处理器的处理能力越来越强大,但是与处理器交互的内存的处理能力并没有提升多少,读取运算,存储运算这些IO操作的瓶颈并没有得以消除,处理器的处理效率比内存的处理......
  • C系统编程通信方式——共享内存
        共享内存,标准IPC之一,也是进程间通信最快的一种方式。1.概念    所有的标准IPC都有一个内部ID作为唯一标识。内部ID的获取通过外部key,key的类型是key_t。key的获取方法有在头文件中定义所有key和通过ftok函数获取一个key。key_tftok(constchar*pathna......