一、概述

前段时间客户碰到基于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. Android-studio-ide-201.7042882-windows-4.1.2项目卡在Gradle: Download gradle-6.5-bin.zip

    现象描述: Android-studio-ide-201.7042882-windows-4.1.2项目卡在Gradle: Download gradle-6.5-bin.zip,如下所示: 原因分析 ...

  2. DVWA靶场JavaScript Attacks漏洞low(低),medium(中等),high(高),impossible(不可能的)所有级别通关教程

    JavaScript Attacks (前端攻击) JavaScript Attacks(前端攻击)漏洞通常涉及利用Web应用程序中的安全漏洞,特别是在JavaScript代码的使用和实现上,从而对用 ...

  3. Solution -「NOI 2017」「洛谷 P3825」游戏

    \(\mathscr{Description}\)   Link.   给大家看个乐子: link, 懒得概括题意啦. \(\mathscr{Solution}\)   对于没有 X 的情况, 显然可 ...

  4. 史上最全MySQL面试60题和答案

    Mysql中有哪几种锁? 1.表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低. 2.行级锁:开销大,加锁慢:会出现死锁:锁定粒度最小,发生锁冲突的概率最低,并发度也 ...

  5. C# webapi 允许跨域(.NET Framework)

    实际项目中,对于WebApi的访问不一定都在同一域名下,所以进行跨域访问的时候,可能会出现如下提示:请求的资源不支持 http 方法"OPTIONS".需要对WebApi进行设置. ...

  6. e-prime3安装

    e-prime2.0版本太老,现在安装尝试3.0. 下载 链接: https://pan.baidu.com/s/1XJFDqhoArpIwEf0NpKvoIQ 提取码: h5xk 安装 解压安装包后 ...

  7. 金泰克S300固态硬盘 SM2256K开卡量产

    开卡原因:固态硬盘出现开机正常,用一会就找不到硬盘了,电脑冷启动后又可以识别硬盘,决定根据网上教程进行开卡量产修复试试. 硬盘型号:tigo S300 120GB,主控芯片SM2256K AB,闪存颗 ...

  8. uni-app消息提示框

    这个组件在界面==>交互反馈中 经常使用的哈: 特别注意:如果值title太长了,可能就一个值都不会显示 1.提示信息:可以用于操作某一项提示用户是否成功: uni.showToast({ ti ...

  9. QR防伪溯源系统追溯原理是什么?

    本文分享自天翼云开发者社区<QR防伪溯源系统追溯原理是什么?>,作者:SD万 QR防伪溯源系统是一种基于QR技术的防伪技术,通过为每件产品生成唯一的QR标签,并将其与产品信息.生产信息.物 ...

  10. P10353 [PA2024] Grupa permutacji 题解

    神秘!在这些排列生成的置换群 \(G\) 里,若 \(\exists \pi \in G\) 使得 \(\pi_i=k,\pi_j=l\),则所有这些 \((k,l)\) 被同样数量的 \(\pi\i ...