解读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

相关推荐
fanly115 天前
通过jmeter压测surging
surging microservice
fanly116 天前
帮客户解决基于surging的物流速运网关内存泄漏问题
surging microservice
fanly119 天前
从木舟平台来庖丁解牛微服务
surging microservice
fanly1118 天前
针对于基于surging的dotnetty组件内存泄漏问题
surging microservice
fanly111 个月前
线上测试木舟物联网平台之如何通过HTTP网络组件接入设备
surging microservice
fanly111 个月前
线上测试木舟平台发布
surging microservice
fanly114 个月前
基于surging的木舟平台如何分布式接入设备
surging microservice
fanly115 个月前
基于木舟平台浅谈surging 的热点KEY的解决方法
surging microservice
fanly115 个月前
基于surging的木舟平台如何构建起微服务
surging microservice
fanly115 个月前
基于surging 的木舟平台如何通过Tcp或者UDP网络组件接入设备
surging microservice