解读surging 的内存过高的原因

前言

对于.NET开发人员来讲,一个程序占用内存过高,是极其糟糕,是一款不合格的程序软件,.NET开发人员也不会去使用服务器垃圾收集器(ServerGarbageCollection),而是选用工作站垃圾收集器,而是对于一款低内存的程序更能给开发人员是一款稳定运行的程序,而对于今天写这篇文章的目的,源于客户说基于surging的服务内存一直升高,内存泄漏,在这里我可以讲解一下,以解决企业、社区用户的疑问。

是否内存泄漏?

对于客户反应后,告诉客户把dump发过来,然后通过dump分析发现是DotNetty.Buffers.PooledByteBufferAllocator 分配堆内存未进行释放

而对于以上的产生的问题, 就要谈到PooledByteBufferAllocator 分配的堆内内存和堆外内存,堆内内存会通过垃圾回收进行回收,而堆外内存是不会通过触发垃圾回收进行回收,而一般是当发送的消息过大,或者并发高产生消息过多都会进入到堆外内存,这样做的目的不频繁触发垃圾回收提高性能。

如何解决问题

而对于以上的问题如何解决呢?

  1. 追求高性能解决方案,设置最大内存,使用服务器垃圾收集器(ServerGarbageCollection)

    运行以下命令,加--memory 参数
    dotnet Surging.Services.Server.dll --memory 2GB
    改成服务器垃圾收集器
    <PropertyGroup>
    <ServerGarbageCollection>true</ServerGarbageCollection>
    </PropertyGroup>

  2. 追求低内存的解决方案

Allocator设置不分配堆外内存,以下是代码:

复制代码
.ChildOption(ChannelOption.Allocator, new  UnpooledByteBufferAllocator(false, true)) 

或者是设置以下donetty 参数:

Environment.SetEnvironmentVariable("io.netty.allocator.numDirectArenas", "0");

总结

如果需要企业版本,多语言异构版本,平台版本可以联系作者,QQ群:744677125

相关推荐
fanly118 天前
如何搭建基于surging的分布式直播流媒体
微服务·surging microservice
fanly1110 天前
凯亚利用直播推流技术请大家看电影
surging microservice·surging
fanly1114 天前
使用的架构是否满足微服务设计思想?
surging microservice·surging
fanly1116 天前
凯亚IOT平台在线测试MQTT接入设备
surging microservice·surging
fanly1119 天前
凯亚物联网平台如何通过MQTT网络组件接入设备
surging microservice·surging
fanly1125 天前
.net clr 8年才修复的BUG,你让我损失太多了
surging microservice
fanly111 个月前
surging 集成SuperSocket预发布版本2.0
surging microservice
fanly111 个月前
通过jmeter压测surging
surging microservice
fanly111 个月前
帮客户解决基于surging的物流速运网关内存泄漏问题
surging microservice
fanly111 个月前
从木舟平台来庖丁解牛微服务
surging microservice