为什么 Ignite 服务器在没有任何活动的情况下显示堆使用情况?

Vir*_*j C 0 ignite

Ignite 版本:2.12 操作系统:Windows 10

我试图了解点燃堆的使用情况。我使用以下命令启动了 Ignite 服务器,没有特殊的 vm 参数。正如https://ignite.apache.org/docs/latest/quick-start/java所建议的

   ignite.bat -v ..\examples\config\example-ignite.xml
Run Code Online (Sandbox Code Playgroud)

开始使用 VisualVM 工具分析堆使用情况的帖子,堆使用情况如下所示

我尝试的下一步是增加堆内存并重新启动服务器。令人惊讶的是,现在 ignite 消耗了更多的内存,如下图所示

我知道 GC 正在努力清除堆,但为什么 ignite 内存消耗会随着堆空间的增加而增加?

这将如何影响具有约 40-60G 内存的服务器,Ignite 预计会消耗多少内存?

我计划使用 ignite 作为内存缓存,并使用 Cassandra 作为数据库。

小智 5

就像 Cassandra、Hadoop 或 Kafka 一样,Ignite 是一个 Java 中间件,它使用 Java 堆来满足各种需求。但您的数据始终存储在堆外内存中,这样就可以利用所有可用内存空间,而不必担心垃圾收集。这使 Ignite 能够完全控制数据的管理方式,并确保系统的长期性能。

Ignite 使用页面内存模型来存储所有内容,包括用户数据、索引、元信息等。这使得 Ignite 能够利用内存管理、提高性能,并且还可以使用整个磁盘而无需任何数据修改。

换句话说,您可能认为直接页内存访问是通过内存指针(JVM 外部)执行的,但一些内部任务(例如引导 Ignite 本身、执行本地 SQL 处理任务等)确实需要 JVM 堆,因为 Ignite 本身是编写的在爪哇。

检查页和该页以了解详细信息。

这将如何影响具有约 40-60G 内存的服务器,Ignite 预计会消耗多少内存?

您需要 40-60 GB 的 RAM + JVM 本身的内存(Java 堆),推荐值可能有所不同,但 2GB 的 Java 堆应该足够了。