问题标签 [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.

0 投票
1 回答
180 浏览

netty - Netty PooledDirect ByteBuf 和 A​​rrayList 意外行为

这似乎是一个愚蠢的错误,因为我找不到为什么所有条目都没有被删除。我正在使用 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 条目。

0 投票
2 回答
1451 浏览

java - 在 DirectMemory 中找不到 PooledUnsafeDirectByteBuf

我正在使用 Netty 4.1.17-Final。

我编写了发送和接收 100 MB 随机 ASCII 的代码。解码器在 ByteBuf 变为 100 MB 之前不会读取。

因此,Netty 缓冲了 100 MB,但即使通过监控 Direct Memory 也没有发现。

Netty 使用了 PooledUnsafeDirectByteBuf,但是你在哪里缓冲接收到的数据呢?还是直接缓冲监控方法不对?

0 投票
1 回答
708 浏览

java - 如何获取 Netty 4 应用程序的直接内存快照

我有一个基于 Netty 的服务器,它异步处理大量 HTTP 请求。

目标 - 公开应用程序的直接内存使用情况。

现在我明白引用计数是暴露内存使用的一种方式。但是对于每个请求,很少有对象(如 httpContent 等)被显式保留,而对于其他对象,Netty 会在内部更新引用计数。

  1. 由于服务器能够一次处理大量请求,我如何监控我的应用程序的直接内存使用情况并公开它?

  2. 有没有办法获取整个应用程序的总引用计数?

  3. 除了 ReferenceCount,还有哪些其他方法可以监控 Direct Memory Usage ?

0 投票
1 回答
91 浏览

java - 为什么建议在 ChannelOutboundHandler 中仅使用带有 [byte] 操作的 Heap Buffers。?

我们正致力于开源一个 api 网关并使用Netty作为底层框架。

我遇到了 Norman Maurer 幻灯片。在其中一张幻灯片中,他提到

如果需要对 ChannelOutboundHandler 中的 byte[] 进行操作,则仅使用堆缓冲区!默认情况下,直接 ByteBuf 将由 ByteBufAllocator.buffer(...) 返回。

以此为经验法则

这条规则背后的原因是什么?

0 投票
1 回答
1526 浏览

java - 一个 Java 进程正在泄漏堆内存

我有一个 java 进程,它每 10 毫秒连续创建一个短暂的线程和一个短暂的直接字节缓冲区,这会占用系统内存。尽管字节缓冲区是短暂的,但它们并没有得到清理。我根导致了这个问题并添加了 maxDirectMemorySize 并且也添加maxCacheBufferSize了,尽管它仍然表现出相同的行为。是因为maxCacheBufferSize? 我的意思是每个线程都在分配一个直接内存,相当于maxCacheBufferSize

0 投票
0 回答
111 浏览

java - 为什么Java在涉及IO系统调用时需要从(到)直接内存复制堆内存?

为什么Java在涉及IO系统调用时需要从(到)直接内存复制堆内存?

有的文章说是GC的原因,但是我没看清楚。如果真的是因为GC,其他语言有这个问题吗,比如Go或者Python?

0 投票
1 回答
705 浏览

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 性能下降吗?

0 投票
1 回答
4259 浏览

apache-spark - spark shuffle memory 错误:无法分配直接内存

在火花数据帧(4x)上执行几个连接时,我收到以下错误:

即使设置:

它没有解决。

0 投票
0 回答
178 浏览

redis - redis可以覆盖Java使用的直接内存吗?

我正在使用访问直接内存的 Apache Arrow Java API。

我也在使用 Redis,当这个 Java API 访问直接内存时,Redis xstream 在内存中继续增长。

偶尔发现,Arrow 会计算以下操作的错误结果,

此方法返回否定结果并且以下代码引发错误

我发现如果我重新启动 Redis(删除所有以前的数据),错误会消失一段时间。如果没有,当我调用 Arrow 方法时,错误会更快发生。

重现至关重要,以我的经验,Arrow 直接内存访问应该很频繁,并且 redis xstream 增长应该足够快。

所以我不是要完全重现和解决问题,而是要问这两个内存访问是否可能发生冲突?上述结果是否有合理的理论支持?

0 投票
0 回答
24 浏览

out-of-memory - Netty:为什么preferDirectBufs模式的moory使用量大于设置为false?

我在 netty 4.1.47 上做了一些性能测试,我发现在同一个测试用例中,mode 下的已用内存大约是设置为 false 的preferDirectBufs4 倍。preferDirectBufs

  1. 设置preferDirectBufs=真;
  2. 做一些性能测试;
  3. 检查PooledByteBufAllocatorMetric#usedDirectMemory() 的值;
  4. 设置preferDirectBufs=假;
  5. 进行与步骤 2 相同的测试;
  6. 检查PooledByteBufAllocatorMetric#usedHeapMemory() 的值;

然后我发现mode中的已用内存大约是设置为false的preferDirectBufs4倍。preferDirectBufs并导致直接内存OOM错误

网络版本:4.1.47

JVM版本:java版本“1.8.0_242”