一、概述

前段时间客户碰到基于surging内存泄漏问题,邀请我来现场帮忙解决,对于dotnetty 我一直又爱又恨,因堆外内存DirectByteBufferChunk 中PoolChunk映射分配的16mb始终无法销毁,后面设置优化了dotnetty 环境变量参数,避免未在同一线程下导致引用计数出现错乱,从而导致的内存泄漏问题。

(木舟物联网平台:http://117.72.121.2:3100

链路跟踪Skywalking V8:http://117.72.121.2:8080/

surging 微服务引擎开源地址:https://github.com/fanliang11/surging(后面surging 会移动到microsurging进行维护)

二 、环境变量配置

我设置以下基于netty 的环境变量,

Environment.SetEnvironmentVariable("io.netty.allocator.maxOrder", "5");//调整 chunkSize 的大小,只能设置0-14范围内的值,默认值11
Environment.SetEnvironmentVariable("io.netty.allocator.numDirectArenas", "0");// 设置Direct Arenas,默认核数*2
Environment.SetEnvironmentVariable("io.netty.allocator.type", "unpooled");// 不使用内存池 Environment.SetEnvironmentVariable("io.netty.allocator.numHeapArenas", "2");// 设置Heap Arenas,默认核数*2

在surging 代码DotNettyModule的RegisterBuilder方法中添加,如下图所示

三、ByteBuf 销毁

surging 在ChannelHandlerAdapter 实例类已经把   ByteBuf进行销毁,如下图所示

四,ByteBuf分配处理销毁

如果bytebuff分配处理销毁处在不同线程下,会导致引用计数错乱,导致无法销毁,内存泄漏。在ChannelRead方法中不要开启线程处理,比如Task.Run ,可以在pipeline中添加eventExecutor 进行处理,如下图所示

五,Dump 分析结果

通过运行一天dump文件进行分析,已经未出现Chunk的16mb 内存。

六、通过链路跟踪Skywalking 来监控是否出现内存性能问题

七、总结

因为身体问题,当中休息了一段时间,预估4月初MQTT会接入到木舟物联网平台,到时候会开放各个协议端口以便让大家进行测试。

针对于基于surging的dotnetty组件内存泄漏问题的更多相关文章

  1. 记一次 Vue 组件内存泄漏的坑

    概述 最近在开发 Vue 项目的时候遇到了内存泄漏问题,记录下来,供以后开发时参考,相信对其他人也有用. 背景 背景是需要用 three.min.js 和 vanta.net.min.js 给首页加上 ...

  2. 基于surging 的stage组件设计,谈谈我眼中的微服务。

    一.前言 随着业务的发展,并发量的增多,业务的复杂度越来越大,对于系统架构能力要求越来越高,这时候微服务的设计思想应运而生,但是对于微服务需要引擎进行驱动,这时候基于.NET CORE 的微服务引擎s ...

  3. 如何在linux下检测内存泄漏

    之前的文章应用 Valgrind 发现 Linux 程序的内存问题中介绍了利用Linux系统工具valgrind检测内存泄露的简单用法,本文实现了一个检测内存泄露的工具,包括了原理说明以及实现细节. ...

  4. 如何在linux下检测内存泄漏(转)

    本文转自:http://www.ibm.com/developerworks/cn/linux/l-mleak/ 本文针对 linux 下的 C++ 程序的内存泄漏的检测方法及其实现进行探讨.其中包括 ...

  5. 基于surging网络组件多协议适配的平台化发展

    前言                Surging 发展已经有快6年的时间,经过这些年的发展,功能框架也趋于成熟,但是针对于商业化需求还需要不断的打磨,前段时间客户找到我想升级成平台化,针对他的需求我 ...

  6. 基于HTML5的WebGL应用内存泄露分析

    上篇(http://www.hightopo.com/blog/194.html)我们通过定制了CPU和内存展示界面,体验了HT for Web通过定义矢量实现图形绘制与业务数据的代码解耦及绑定联动, ...

  7. Java安全之基于Tomcat的Filter型内存马

    Java安全之基于Tomcat的Filter型内存马 写在前面 现在来说,内存马已经是一种很常见的攻击手法了,基本红队项目中对于入口点都是选择打入内存马.而对于内存马的支持也是五花八门,甚至各大公司都 ...

  8. 低代码平台--基于surging开发微服务编排流程引擎构思

    前言 微服务对于各位并不陌生,在互联网浪潮下不是在学习微服务的路上,就是在使用改造的路上,每个人对于微服务都有自己理解,有用k8s 就说自己是微服务,有用一些第三方框架spring cloud, du ...

  9. 『神坑』DotNetty 内存泄漏 解决办法

    背景 近来在用 DotNetty 实现一个文件上传下载的同步服务. 其中:客户端下载服务端的文件,客户端多次请求,从服务端将文件分片下载下来,追加到本地磁盘. —— 非常简单的代码,都写了几十次了,驾 ...

  10. 基于vue项目的组件中导入mui框架初始化滑动等效果时需移除严格模式的问题

    基于vue项目的组件中导入mui框架初始化滑动等效果时,控制台报错:Uncaught TypeError: 'caller', 'callee', and 'arguments' properties ...

随机推荐

  1. 记录一次线上服务OOM排查

    外面,阳光明媚,一切正好. 就在我欢天喜地准备迎来愉快的双休时,忽然之间,天塌了. 刚上线一小时的服务内存异常OOM了! 老实说,在我印象里OOM问题只存在于网上案例中,练习编码时常两年半,还是第一次 ...

  2. 在 .NET 9 中使用 Scalar 替代 Swagger

    前言 在.NET 9发布以后ASP.NET Core官方团队发布公告已经将Swashbuckle.AspNetCore(一个为ASP.NET Core API提供Swagger工具的项目)从ASP.N ...

  3. Redis中缓存预热、击穿、雪崩等问题解决方案-copy

    1.缓存雪崩 缓存雪崩是指缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉. 解决方案 缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生. ...

  4. runoob-NumPy(python)

    https://www.runoob.com/numpy/numpy-tutorial.html NumPy 教程 NumPy(Numerical Python) 是 Python 语言的一个扩展程序 ...

  5. nginx平台初探-5

    nginx的请求处理阶段 (90%)   接收请求流程 (99%)   http请求格式简介 (99%) 首先介绍一下rfc2616中定义的http请求基本格式:   Request = Reques ...

  6. Fo-dicom通过C-store方式发送图片

    1 using Dicom.Network; 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 us ...

  7. 九集代码深度解析SpringBoot原理:笔记整理

    手动注册Tomcat中的servlet容器 子父容器概念

  8. overflow秒解外边距合并以及浮动导致的元素塌陷问题

    外边距导致的合并问题: 1 处于一上一下位置的两个块级元素 在同时各自设置了上下边距时,二者间的外边距通常以 数值较大的一个作为两者间的外边距 而不是简单的数值相加 .box2{ width: 100 ...

  9. Vue获取DOM,数据监听,组件,混合和插槽

    Vue获取DOM,数据监听,组件,混合和插槽 注:":" 是指令 "v-bind"的缩写,"@"是指令"v-on"的缩写 ...

  10. NSSM使用说明

    1.说明 NSSM是一个服务封装程序,它可以将普通exe程序封装成服务,使之像windows服务一样运行.同类型的工具还有微软自己的srvany,不过nssm更加简单易用,并且功能强大.它的特点如下: ...