【问题标题】:nodetool info and java memory mismatchnodetool 信息和 java 内存不匹配
【发布时间】:2019-02-07 21:20:04
【问题描述】:

在 6 节点 cassandra 集群上,堆大小配置为 31g。当我运行 nodetool info 时,我看到下面

Nodetool info - 
[root@ip-10-216-86-94 ~]# nodetool info
ID                     : 88esdsd01-5233-4b56-a240-ea051ced2928
Gossip active          : true
Thrift active          : false
Native Transport active: true
Load                   : 53.31 GiB
Generation No          : 1549564460
Uptime (seconds)       : 734
Heap Memory (MB)       : 828.45 / 31744.00
Off Heap Memory (MB)   : 277.25
Data Center            : us-east
Rack                   : 1a
Exceptions             : 0
Key Cache              : entries 8491, size 1.12 MiB, capacity 100 MiB, 35299 hits, 44315 requests, 0.797 recent hit rate, 14400 save period in seconds
Row Cache              : entries 0, size 0 bytes, capacity 0 bytes, 0 hits, 0 requests, NaN recent hit rate, 0 save period in seconds
Counter Cache          : entries 5414, size 1.22 MiB, capacity 50 MiB, 5387 hits, 10801 requests, 0.499 recent hit rate, 7200 save period in seconds
Chunk Cache            : entries 6164, size 249.5 MiB, capacity 480 MiB, 34840 misses, 177139 requests, 0.803 recent hit rate, 121.979 microseconds miss latency
Percent Repaired       : 0.0%
Token                  : (invoke with -T/--tokens to see all 8 tokens)

使用和分配的堆内存映射到我在 jconsole 上看到的内容。但是对于非堆内存,在 jconsole 上显示 188mb,而从 info 命令显示 277mb,为什么会出现不匹配?

【问题讨论】:

  • 请不要把几个不相关的问题合二为一。我的意思是关于连接和线程的子问题与标题“cassandra 中的内存如何分配”无关。
  • 关于内存话题,this answer应该说明情况。 Cassandra 严重依赖内存映射文件。 JConsole 中的“堆”和“非堆”指标都不包括内存映射文件。
  • JConsole 中的“非堆”内存和 nodetool 显示的“堆外内存”是完全不同的东西。前者是JVM metrics,包括元空间和代码缓存大小,而后者是Cassandra列族的Bloom过滤器、索引摘要和压缩元数据的总大小。
  • 尝试安装Opscenter以查看每个节点上的所有内存使用情况,您可以通过创建各种图表在其仪表板上查看数据和内存的历史使用情况。
  • @apangin 感谢您提供有用的链接。按照您的建议分开问题。

标签: memory cassandra jvm


【解决方案1】:

JConsole 中的Non-Heap Memory 和nodetool 显示的Off Heap Memory 是完全不同的东西。

  1. JConsole 中的非堆内存是 JVM 非堆内存池的总和。 JVM 通过MemoryPoolMXBean 导出此信息。从 JDK 8 开始,这些池包括:

    • 元空间
    • 压缩类空间
    • 代码缓存

因此,非堆池显示 JVM 用于类元数据和编译代码的内存量。

  1. Nodetool 从 Cassandra 的列族指标中获取堆外内存统计信息。这是所有打开的表的布隆过滤器、索引摘要和压缩元数据的总大小。
    请参阅 nodetool tablestats 了解此统计数据的详细分类。

【讨论】:

    猜你喜欢
    • 2011-02-22
    • 2019-04-06
    • 2012-02-11
    • 2021-04-25
    • 2020-03-06
    • 2021-02-23
    • 2018-05-17
    • 1970-01-01
    相关资源
    最近更新 更多