-
Notifications
You must be signed in to change notification settings - Fork 47
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Huge Memory Usage-DotNetty.Buffers.HeapArena and DotNetty.Buffers.DirectArena #58
Comments
更新一下结果,修改配置之后没有出现“内存泄露”的情况。但是按照之前的人的说法是,这样做配置会导致性能下降。不知是否可以既使用内存的池化技术,又不出现内存泄露的使用方式 |
这几天因为新冠在家里做自我隔离,没及时看信息:pray:
你要确保在同一进程内不在使用 PoolByteBuffer,也可以使用 ArrayPooledByteBufferAllocator 代替 UnpooledByteBufferAllocator |
后期会做些修改,配置应该跟随 Bootstrap/ServerBootstrap 实例,PooledByteBuffer实现根据实际需求来延迟分配 |
但是有一点要说,系统分配PoolByteBuffer不会造成内存泄漏,就像使用 System.Buffers.ArrayPool.Shared 一样,如果内存一直增长的话,还是看业务代码部分 |
首先感谢大佬能在百忙之中抽出时间回复我 接入的客户端的行为的话就是非常的不稳定,连上几分钟,然后疯狂的输出一波流量,然后断线,下次再这样。不过监测下来的话整体流量是稳定的,线上(也就是服务器)大约在3~5MB/s。正如之前提到,整个代码仅是调整了配置项
其它没有做任何改动,这样做之后dump就再也找不到16MB那种内存占用块了。如果不是“内存泄露”,那是因为什么原因导致dotnetty复用效率低了吗?
另一个线程
我看了一下源码 另外还有一个可疑的地方就是代码中的 另外,说一个题外话。dotnetty在国内的社区圈还是很有人气的,能和dotnetty一较高一下的就只有一个suppersocket了。但是suppersocket的设计理念个人感觉不及netty(毕竟是java社区那么多人智慧的积累)。所以,大佬为何不建一个dotnetty的交流群(当然,最终极有可能变成大佬单方面的疑难问题解答群。。。。) |
@kamikyo 看你的描述我无法判断客户端短线的原因,还有几个建议如下:
|
非常感谢大佬的指导,我会抽时间逐条进行实践。再次感谢! |
Sorry to bother, but using these options still "leak" memory (in 8kb steps), which is a lot better than 16mb at a time, but still not acceptable. I have created an issue demonstrating the problem. Environment.SetEnvironmentVariable("io.netty.allocator.numHeapArenas", "0");
Environment.SetEnvironmentVariable("io.netty.allocator.numDirectArenas", "0");
...
.Option(ChannelOption.Allocator, UnpooledByteBufferAllocator.Default); |
大佬,我在使用Dotnetty(Spannetty同样如此)时会出现内存一直涨的问题(接服务器的客户端网络不稳,经常性的会断线重连)。我通过dump分析,发现内存主要耗费在DotNetty.Buffers.HeapArena 和 DotNetty.Buffers.DirectArena 上面。下面分两个场景来描述:
1。服务器上(cpu 8核,内存128GB)的代码配置如下:
.Option(ChannelOption.Allocator, UnpooledByteBufferAllocator.Default)
dump分析会有大量的DotNetty.Buffers.HeapArena,每块16MB
2。家里使用的配置如下:
dump分析会有大量的DotNetty.Buffers.HeapArena和DotNetty.Buffers.DirectArena,每块大约8KB
接下来我会将配置调整为:
再进行测试,有结果会继续更新在这里。
在原dotnetty的issues里我找到了这样的issue Huge Memory Usage-DotNetty.Buffers.HeapArena 感觉最终也还是没有一个解决的办法
是否我dotnetty的使用方式不对,还是说这块是一个历史上的遗留问题?
注:家里测试的话,接收流量大约在1.6MB/s左右
The text was updated successfully, but these errors were encountered: