问题标签 [directmemory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
netty - Netty PooledDirect ByteBuf 和 ArrayList 意外行为
这似乎是一个愚蠢的错误,因为我找不到为什么所有条目都没有被删除。我正在使用 JAVA_OPTS 运行:
-XX:MaxDirectMemorySize=67108864 -Dio.netty.leakDetectionLevel=advanced -D-Dio.netty.allocator.type=pooled -XX:+UseG1GC -Xms40m -Xmx40m -Dio.netty.allocator.numDirectArenas=4
这是完整的代码:
输出是:
现在发布..64512 后数组大小=32256
不知道只有一半的条目被删除。ArrayList 中仍然有 ByteBuf 条目。
java - 在 DirectMemory 中找不到 PooledUnsafeDirectByteBuf
我正在使用 Netty 4.1.17-Final。
我编写了发送和接收 100 MB 随机 ASCII 的代码。解码器在 ByteBuf 变为 100 MB 之前不会读取。
因此,Netty 缓冲了 100 MB,但即使通过监控 Direct Memory 也没有发现。
Netty 使用了 PooledUnsafeDirectByteBuf,但是你在哪里缓冲接收到的数据呢?还是直接缓冲监控方法不对?
java - 如何获取 Netty 4 应用程序的直接内存快照
我有一个基于 Netty 的服务器,它异步处理大量 HTTP 请求。
目标 - 公开应用程序的直接内存使用情况。
现在我明白引用计数是暴露内存使用的一种方式。但是对于每个请求,很少有对象(如 httpContent 等)被显式保留,而对于其他对象,Netty 会在内部更新引用计数。
由于服务器能够一次处理大量请求,我如何监控我的应用程序的直接内存使用情况并公开它?
有没有办法获取整个应用程序的总引用计数?
除了 ReferenceCount,还有哪些其他方法可以监控 Direct Memory Usage ?
java - 为什么建议在 ChannelOutboundHandler 中仅使用带有 [byte] 操作的 Heap Buffers。?
我们正致力于开源一个 api 网关并使用Netty作为底层框架。
我遇到了 Norman Maurer 幻灯片。在其中一张幻灯片中,他提到
如果需要对 ChannelOutboundHandler 中的 byte[] 进行操作,则仅使用堆缓冲区!默认情况下,直接 ByteBuf 将由 ByteBufAllocator.buffer(...) 返回。
以此为经验法则
这条规则背后的原因是什么?
java - 一个 Java 进程正在泄漏堆内存
我有一个 java 进程,它每 10 毫秒连续创建一个短暂的线程和一个短暂的直接字节缓冲区,这会占用系统内存。尽管字节缓冲区是短暂的,但它们并没有得到清理。我根导致了这个问题并添加了 maxDirectMemorySize 并且也添加maxCacheBufferSize
了,尽管它仍然表现出相同的行为。是因为maxCacheBufferSize
? 我的意思是每个线程都在分配一个直接内存,相当于maxCacheBufferSize
?
java - 为什么Java在涉及IO系统调用时需要从(到)直接内存复制堆内存?
为什么Java在涉及IO系统调用时需要从(到)直接内存复制堆内存?
有的文章说是GC的原因,但是我没看清楚。如果真的是因为GC,其他语言有这个问题吗,比如Go或者Python?
java - Netty 中的 io.netty.allocator.maxOrder 是什么?
请解释一下 Netty 中的 io.netty.allocator.maxOrder 是什么!
默认情况下,它的值为 11,因此每个块我得到 8192 << 11 = 16MiB 对于 Java 11 上的 2 个核心,我得到 4 个直接竞技场,每个竞技场有 6 个 DirectByteBuffers(我有内存转储)。所以 16Mib x 4 个竞技场 x 6bufs = 384Mib。
我的应用程序有基于 netty 的传输服务器,有数百个客户端连接发送大量小消息(每条消息一些 KB)。但我的应用程序也使用直接内存来满足自己的需要。所以额外的 384Mib 对我来说太贵了。
请告知,我可以将 io.netty.allocator.maxOrder 减少到 8 而不会使 netty 性能下降吗?
apache-spark - spark shuffle memory 错误:无法分配直接内存
在火花数据帧(4x)上执行几个连接时,我收到以下错误:
即使设置:
它没有解决。
redis - redis可以覆盖Java使用的直接内存吗?
我正在使用访问直接内存的 Apache Arrow Java API。
我也在使用 Redis,当这个 Java API 访问直接内存时,Redis xstream 在内存中继续增长。
我偶尔发现,Arrow 会计算以下操作的错误结果,
此方法返回否定结果并且以下代码引发错误
我发现如果我重新启动 Redis(删除所有以前的数据),错误会消失一段时间。如果没有,当我调用 Arrow 方法时,错误会更快发生。
重现至关重要,以我的经验,Arrow 直接内存访问应该很频繁,并且 redis xstream 增长应该足够快。
所以我不是要完全重现和解决问题,而是要问这两个内存访问是否可能发生冲突?上述结果是否有合理的理论支持?
out-of-memory - Netty:为什么preferDirectBufs模式的moory使用量大于设置为false?
我在 netty 4.1.47 上做了一些性能测试,我发现在同一个测试用例中,mode 下的已用内存大约是设置为 false 的preferDirectBufs
4 倍。preferDirectBufs
- 设置
preferDirectBufs
=真; - 做一些性能测试;
- 检查
PooledByteBufAllocatorMetric
#usedDirectMemory() 的值; - 设置
preferDirectBufs
=假; - 进行与步骤 2 相同的测试;
- 检查
PooledByteBufAllocatorMetric
#usedHeapMemory() 的值;
然后我发现mode中的已用内存大约是设置为false的preferDirectBufs
4倍。preferDirectBufs
并导致直接内存OOM错误
网络版本:4.1.47
JVM版本:java版本“1.8.0_242”