解读surging 的内存过高的缘故原由

打印 上一主题 下一主题

主题 907|帖子 907|积分 2721

前言

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


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

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

而对于以上的问题怎样解决呢?
1. 寻求高性能解决方案,设置最大内存,使用服务器垃圾收集器(ServerGarbageCollection)
  1. 运行以下命令,加--memory 参数
  2. dotnet Surging.Services.Server.dll --memory 2GB
  3. 改成服务器垃圾收集器
  4. <PropertyGroup>
  5.     <ServerGarbageCollection>true</ServerGarbageCollection>
  6. </PropertyGroup>
复制代码
2. 寻求低内存的解决方案
Allocator设置不分配堆外内存,以下是代码:
  1. .ChildOption(ChannelOption.Allocator, new  UnpooledByteBufferAllocator(false, true))
复制代码
或者是设置以下donetty 参数:
Environment.SetEnvironmentVariable("io.netty.allocator.numDirectArenas", "0");
总结

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我可以不吃啊

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表