jor*_*o10 9 memory-leaks netty
嗨,我试图理解为什么我的应用程序内存消耗如此之大,所以我使用 VisualJVM 下载了一个堆转储,然后使用 Eclipse Mat 对其进行了分析。它发现了以下问题:
One instance of "io.netty.buffer.PoolChunk" loaded by "jdk.internal.loader.ClassLoaders$AppClassLoader @ 0x7f04ba5b0" occupies 16,793,832 (32.78 %) bytes. The memory is accumulated in one instance of "byte[]" loaded by "<system class loader>".
有人可以给我一些关于如何解决这个问题的建议吗?要查找和搜索哪些数据?
我的第一次尝试是设置 -Dio.netty.allocator.type=unpooled 参数,这消除了与字节相关的问题嫌疑,但引入了与类加载器相关的其他2个问题。
ByteBufAllocatorNetty默认使用池化,它以“块”的形式分配内存。这就是你在这里看到的。所以它基本上分配一个块,然后在需要内存时切出这个块的内存。一旦无法填满内存,就需要分配新的块,依此类推。
添加 -Dio.netty.allocator.type=unpooled 显示内存显着减少
关于性能,在我们的案例中,非池化和池化的表现相似
但 GC 的峰值很少 - 但总体而言,非池化的响应时间更好