记一次ssl方式导致的堆外内存泄露

记一次 JMeter 压测 HTTPS 性能问题 再看下代码逻辑,发现其实可以通过 javax.net.ssl.sessionCacheSize 来设置缓存的大小,在 JMeter 启动时,添加 JVM 参数-D javax.net.ssl.sessionCacheSize=1,将缓存大小设置为 1,重新压测验证,观察 GC。那么观察下压测的 RT,结果。再回到 GC 的耗时分析部分,仔细看下,其实 Full GC 只有 1 次,阻塞性的耗时并不多,Young GC 虽然频繁,但阻塞时间很短,也不至于将 SSL 加解密的 CPU 计算时间片全部抢占。 阅读详情

在巡检的时候突然发现现网某业务使用内存大约6G,问题是我们配置的-Xmx=2G,metaspace没配置,从GC日志看

第一次提交的最大metaspace为1G,假设都使用了,堆外内存最小也有3G了
定位步骤
1.查看/proc/${pid}/smaps文件(pmap命令也类似)
发现20来个65536KB的块

而且连续观察到64M块和内存增长量也符合,搜到案例  http://blog.11034.org/2016-09/64bits_linux_arena_memory.html ,预计可以解决;

2.那么这些65536的块里内容是啥呢?
现网业务暂时还没挂,缓慢增长中,看测试环境有类似问题,果断core一个文件下来看看
gdb后
attach xxx
gcore core.xxx
detach
然后就生成了core.xxx文件,然后 gdb -core core.xxx ,
x/1000s 0x7f75b0000000  (其中7f75b0000000为smap中的起始地址)

然后能够看到很多证书相关内容

想到最近版本修改CSE的ssl方式为openssl,于是去掉ssl方式修改为jdk方式,现网重启,观察一天后问题修复

后续直接联系cse的开发,经过他测试确认,netty-tcnative-boringssl-static-2.0.7.Final.jar版本有bug,后续需要升级cse解决。

这次问题比较麻烦的地方有2个:

1.现网几乎所有微服务内存缓慢增长,测试环境只有2个微服务有问题,而且运行了2周才出现,修改参数重启的方式,在测试环境上没法验证

2.现网内存虽然在增加,但是没挂,也就没堆栈可以看,庆幸有gdb搞一把保存了现场看内容

netty之内存泄露检测 本文看下netty内存泄露检测相关内容,当然,这里的内存泄露不是bytebuf对象本身,是bytebuf关联的堆外内存。 阅读详情

相关推荐

跨语言通信安全漏洞图谱:三层信道风险与内存泄漏检测实战

在微服务与云原生架构中,跨语言通信已成为连接不同技术栈组件的核心枢纽。其核心原理在于通过标准化的协议(如gRPC、HTTP)或进程间通信(IPC)机制,实现数据在不同编程语言运行时环境间的交换。这一过程的技术价值在于提升了系统构建的灵活性与异构集成能力,但同时也引入了数据一致性、协议实现差异和内存管理等复杂风险。尤其在涉及C扩展、本地库交互或网络缓冲区操作时,堆外内存泄漏和文件描述符泄漏等内存安全问题变得异常隐蔽,传统单语言调试工具往往难以定位。这些风险在AI Agent通信、多语言微服务调用等应用场景中尤

weixin_33994429的博客 537

JVM原理和优化

本文转自 :http://blog.youkuaiyun.com/ning109314/article/details/10411495 JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境. 1.创建JVM装载环境和配置 2.装载JVM.dll 3.初始化JVM.dll并挂界到JNIENV(JNI调用接口)实例 4.调用JNIEnv实例装...

weixin_34363171的博客 414

企业级Apache Solr安全加固实战:从高危漏洞修复到深度配置优化

在分布式搜索与大数据处理领域,企业级搜索平台的安全防护是系统架构中至关重要的一环。其核心原理在于通过严格的访问控制、输入验证、配置管理和运行时监控,构建纵深防御体系,以抵御外部攻击与内部风险。对于广泛应用的Apache Solr而言,其技术价值不仅体现在高性能的全文检索能力,更在于能否在复杂生产环境中稳定、安全地处理敏感数据。典型的应用场景包括电商商品搜索、内容管理系统、日志分析平台等,这些场景往往涉及用户隐私或商业数据,对安全性有极高要求。本文聚焦于Solr的远程代码执行(RCE)与反序列化等常见高危漏洞

weixin_30654419的博客 675

SSL 操作线程大量blocked和大量CLOSE_WAIT 连接

为什么80%的码农都做不了架构师?>>> ...

weixin_34384915的博客 1193

Java HttpClient资源管理:CloseableHttpClient连接池与超时重试实战

HTTP客户端是Java应用网络通信的基础组件,其核心在于连接生命周期管理。CloseableHttpClient作为Apache HttpClient 4.x中实现AutoCloseable的关键实现类,通过PoolingHttpClientConnectionManager提供可配置的连接复用能力,结合RequestConfig实现连接、读取与请求获取三重超时控制,并支持自定义HttpRequestRetryHandler应对瞬时网络故障。这些机制共同保障了高并发、弱网络环境下的服务稳定性与资源可控性,

weixin_30824599的博客 581

麒麟 ARMv10 SP3 安装 Oracle 19c 官方文档 或 教程

在麒麟ARMv10 SP3系统上安装Oracle 19c需要特别注意架构兼容性。

qq_43032338的博客 2936

太坑了!Spring Boot 导致堆外内存泄露了!

发现命令显示的committed的内存小于物理内存,因为jcmd命令显示的内存包含堆内内存、Code区域、通过unsafe.allocateMemory和DirectByteBuffer申请的内存,但是不包含其他Native Code(C代码)申请的堆外内存。这时,再返过来看gperftools的内存分布情况,发现使用Spring Boot时,内存使用一直在增加,突然某个点内存使用下降了好多(使用量直接由3G降为700M左右)。为了防止误判,笔者使用了pmap查看内存分布,发现大量的64M的地址;

weixin_44066506的博客 500

TypeScript领域建模实战:基于斯坦福本体论七步法构建健壮数据模型

在软件工程中,领域建模是连接业务需求与技术实现的关键桥梁,其核心在于对业务概念、属性及其关系的显式定义与规范。通过系统化的建模方法,开发者能够将模糊的领域知识转化为清晰、可扩展且类型安全的数据结构,从而在编译时捕获潜在错误,提升代码质量与可维护性。这一过程的技术价值在于实现了从业务逻辑到类型系统的无损映射,确保了设计的一致性。在实践中,结合TypeScript的静态类型检查与Zod的运行时验证,可以构建起从概念到代码再到数据库的三层一致性约束。本文以电商、博客等常见应用场景为例,深入解析如何运用源自斯坦福知

weixin_42551967的博客 382

追踪 Netty 异常占用堆外内存的经验分享

https://zhuanlan.zhihu.com/p/21741364 本文记述了定位 Netty 的一处漏洞的全过程。事情的起因是我们一个使用了 Netty 的服务,随着运行时间的增长,其占用的堆外内存会逐步攀升,大概持续运行三四天左右,堆外内存会被全部占满,然后只能重启来解决问题。好在服务是冗余配置的,并且可以自动进行 Load Balance,所以每次重启不会带来什么损失。

9026

【ShaderToy】开篇

写在前面呜呼,好久没有写博客了,好惭愧。题外话,感觉越大就越想家,希望可以一直和家人在一起,哪怕只是坐在一起不说话也觉得很温暖,一想到要分开眼睛就开始酸,哎。开学还是爬上来老实更新博客学习吧~今天爬上来一看,发现优快云的博客编辑终于更新了!进步总是好的,以前的编辑器实在很捉急。使用这种标记语言的确方便了很多,但好像颜色字体没法设置?程序员果然对美观没什么追求。ShaderToy如果你还没听过Sha

candycat 8万+

【25届数字IC秋招总结】面试经验13——豪威科技面试

25届数字ic面试记录———豪威科技

lalala0635的博客 362

Linux内存泄露案例分析和内存管理分享

这次内存暴涨的问题根本原因是curl-7.19.7依赖的NSS库存在dentry泄漏的bug导致的,探测脚本只是将这个问题暴露出来。这次问题由Linux内存泄漏引发的问题,因此以点带面再次系统学习一下Linux内存管理的知识非常有必要,对我们以后排查内存暴涨的问题非常有帮助。

京东科技开发者 593

GEE生物量碳储量——利用sens和MK检验方法计算1987-2022年森林地上生物量AGB和碳储量的时空变化特征

本文是将之前已经处理好的森林生物量和碳储量数据保存到GEE Assets中,然后分别将单张影像导入到代码编辑器中,构建一个时间序列集合,并且这里需要用到的是我们给影像添加指定的时间属性,这样方便进行下一步的时序分析和空间预测。首先,需要收集1987年至2022年期间森林地上生物量AGB和碳储量数据。该数据可以通过森林清查数据、卫星遥感数据等途径获取。然后,根据这些数据,可以使用sens(敏感性分析)和MK(Mann-Kendall)方法计算时空变化特征。

此星光明博客 1264

netty https下内存溢出问题.

  在最近几个月使用netty实现了网络开发,其中就遇到使用https导致内存溢出的情况. 过程描述如下:  1, 在第一个版本当中,为了性能考虑,netty默认使用了内存池以及堆外内存,在测试环境上表现良好,然而在线上的使用过程中发现,运行一周之后netty+https会导致内存溢出. 测试与生产的差异在于生产环境因为用户的复杂性,会使用不同的ssl加密方法, 以及存在大量socket的创建,...

lkclkc88的专栏 1605

【时时三省】vector cast 常见错误解决/vcast常见错误解决

介绍在使用 vector cast/vcast 软件的过程中,遇到的异常问题。其它异常可以私信解决(购买专栏的前提下)。

时时三省的博客 447

Spring Boot入门(03): 从零开始学习配置文件:掌握YAML和Properties,轻松应对多环境配置管理

在Spring Boot开发中,配置文件是非常重要的。本文将带领你从零开始学习配置文件,掌握YAML和Properties的语法,轻松应对多环境配置管理。无论是开发、测试还是生产环境,你都可以轻松切换不同的配置文件,并且能够灵活修改配置信息。

**My Coding Family** 4万+

Tomcat内存占用过高:系统性调优与实战排查指南

在Java Web应用开发与运维中,JVM内存管理和性能调优是保障应用稳定性的核心基础。其原理在于通过合理划分堆、栈、元空间等内存区域,并配合垃圾回收机制,来高效管理对象生命周期。深入理解JVM内存模型与GC行为,对于提升应用吞吐量、降低延迟具有关键的技术价值,尤其在处理高并发请求的Web服务器场景下。当部署于Tomcat这类Servlet容器时,常见的内存占用过高问题,往往源于不合理的JVM参数配置、线程池设置或应用层的内存泄漏。本文聚焦 **Tomcat调优** 与 **内存泄漏** 排查,通过解析内存

416

SIMULINK开发项目实例 1000 例专栏之第847例--基于飞行控制与稳定性的场景实例:多旋翼无人机在风扰动下的稳定性分析

本文介绍了使用Simulink进行多旋翼无人机风扰动稳定性分析的完整流程。首先建立包含动力学模型、控制系统和环境模拟三大模块的仿真系统,其中动力学模型基于牛顿-欧拉方程,控制系统采用PID调节器。重点展示了MATLAB函数实现的风扰动模型和姿态控制算法,通过设置输入信号和输出显示模块完成闭环仿真。最后通过多次风速条件下的仿真测试评估控制系统的抗干扰能力和稳定性表现,为无人机控制系统设计提供了有效的仿真验证方法。

xiaoheshang_123的博客 321

Netty防止内存泄漏措施

谨以此文献给李林锋新生的爱女。李林锋此后还将在 InfoQ 上开设 Netty 专题持续出稿,感兴趣的同学可以持续关注。1. 背景1.1 直播平台内存泄漏问题某直播平台,一些网红的直播间在业务高峰期,会有10W+的粉丝接入,如果瞬间发生大量客户端连接掉线、或者一些客户端网络比较慢,发现基于Netty构建的服务端内存会飙升,发生内存泄漏(OOM),导致直播卡顿、或者客户端接收不到服务端推送的消息,...

weixin_34174132的博客 116

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

2024年最全超棒!由一道腾讯面试题吃透 V8 引擎的垃圾回收(4),面试官问的很细

如果你已经下定决心要转行做编程行业,在最开始的时候就要对自己的学习有一个基本的规划,还要对这个行业的技术需求有一个基本的了解。有一个已就业为目的的学习目标,然后为之努力,坚持到底。如果你有幸看到这篇文章,希望对你有所帮助,祝你转行成功。开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】我们知道,JavaScript之所以能在浏览器环境和NodeJS环境运行,都是因为有V8引擎在幕后保驾护航。从编译、内存分配、运行以及垃圾回收等整个过程,都离不开它。

2401_84446882的博客 772

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java对象池从原理到实战:设计、并发控制与性能优化

在Java后端开发中,对象池是一种重要的资源复用技术,通过预先创建并复用代价高昂的对象,避免频繁创建和销毁带来的性能损耗。其核心思想与线程池一脉相承,都是通过池化提升系统稳定性与吞吐量。从数据库连接、Socket通道到ByteBuffer等场景,池化能显著减少初始化开销和GC压力。实现一个高效的对象池,需要理解容器选择、生命周期管理、线程安全控制以及容量动态调整等关键机制。本文从最简单的单线程池入手,逐步引入Lock、Condition实现阻塞式借用,并封装为泛型通用池,最后结合实战剖析常见坑点、锁粒度优化

weixin_29611239的博客 316

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【面试】898- 由一道腾讯面试题吃透 V8 引擎的垃圾回收

腾讯题目如下:functiontest(){ vara=1; varb={}; varc={a:a}; returnc; } ...

pingan8787 661

由一道腾讯面试题聊聊 V8 引擎的垃圾回收

腾讯题目:functiontest(){ vara=1; varb={}; varc={a:a}; returnc; } 执行...

我本可以容忍阳光,如果我不曾见过太阳,然而阳光已使我荒凉,成为更新的荒凉。 421
上一篇: 记录下并行优化时的一个问题
下一篇: 一次kafka堆积问题解决
coder_xia
博客等级 码龄17年 151粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值