它使用堆内存还是剩余的服务器内存?
我有一个具有 32 GB RAM 的服务器,我用 25 GB 的 MAX_HEAP_SIZE 初始化了 Cassandra,并指定了 20 GB 的行缓存容量。
我是否正确地假设行缓存使用了我初始化进程的堆内存?或者我的配置是否期望服务器至少有 45 GB 的内存?
它使用堆内存还是剩余的服务器内存?
我有一个具有 32 GB RAM 的服务器,我用 25 GB 的 MAX_HEAP_SIZE 初始化了 Cassandra,并指定了 20 GB 的行缓存容量。
我是否正确地假设行缓存使用了我初始化进程的堆内存?或者我的配置是否期望服务器至少有 45 GB 的内存?
此行键文档指出有 2 个实际的 row_cache_provider 实现:
SerializingCacheProvider:将行的内容序列化并存储在本机内存中,即脱离JVM Heap
和
ConcurrentLinkedHashCacheProvider:使用 JVM heap缓存行,提供与 0.8 之前的 Cassandra 版本相同的行缓存行为。
默认为SerializingCacheProvider,因此如果您不更改它,行缓存不会使用 JVM 堆内存。
看源码,行缓存是一个ICache
,它被放入堆中,因为它是一个没有特殊处理的对象。
您可以执行进一步的测试以确定真实的性能和内存处理。