AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 340515
Accepted
Erick Ramirez
Erick Ramirez
Asked: 2024-06-26 11:48:51 +0800 CST2024-06-26 11:48:51 +0800 CST 2024-06-26 11:48:51 +0800 CST

为什么升级 Cassandra 后节点的内存使用量会增加?

  • 772

节点似乎比运行 Cassandra 2.1 时使用了更多的内存。

当节点升级到较新版本的 Cassandra 时,服务器上的内存利用率突然飙升,一些节点报告内存不足错误。是什么导致了这种现象?

cassandra
  • 1 1 个回答
  • 41 Views

1 个回答

  • Voted
  1. Best Answer
    Erick Ramirez
    2024-06-26T11:48:51+08:002024-06-26T11:48:51+08:00

    症状

    用户报告了在使用 Cassandra 2.1 运行时集群未观察到的性能问题。升级到 Cassandra 2.2 或 3.x 后不久,尽管应用程序负载、集群流量、访问模式、一天/一周/一个月的时间以及硬件/网络资源等因素相同,节点仍会遇到问题。

    症状包括:

    • 堆外内存使用量显著增加(例如,使用 或 等 Linux 实用程序进行监控时top)sar。
    • 增加了 P99 和/或最大读取延迟(例如从nodetool tablehistograms输出)。
    • 极端情况下的间歇性读取请求超时。

    在极少数情况下,节点上启动的 Cassandra 无法完成启动序列,因为大部分内存被很快消耗并最终耗尽,因此 Linuxoom-killer会终止 Cassandra 进程。

    原因

    mmap()Apache Cassandra 通过 Unix 系统调用(或mmap简称)使用内存映射文件 I/O。mmap系统调用允许 Cassandra 使用操作系统的虚拟内存来保存数据文件的副本,因此读取 SSTables 的速度很快。cassandra.yaml名为 的隐藏属性disk_access_mode决定了如何访问数据文件。有效选项包括:

    • auto(默认)- SSTable 数据和索引文件都映射到 64 位系统上;仅索引文件映射到 32 位系统上
    • mmap- 数据和索引文件都映射到内存
    • mmap_index_only- 只有索引文件映射到内存
    • standard- Cassandra 使用标准 IO,没有文件映射到内存

    在 Cassandra 2.1 或更早版本中,读取压缩的 SSTables 涉及将数据复制到堆上,然后发送到堆缓冲区进行解压缩,并且表现得好像磁盘访问模式设置为,mmap_index_only尽管默认模式是auto。

    随着 Cassandra 2.2 ( CASSANDRA-8464 )中增加了对直接缓冲区解压缩的支持,磁盘访问模式的行为发生了变化,变为了设计时的方式,即auto64 位系统上的默认模式现在mmap()同时包含 SSTable 数据和索引文件。

    如果存在大量随机读取,并且读取量很大的 SSTable 集大于可用内存,则受影响的节点将出现大量页面错误。在某些情况下,受影响的服务器会耗尽内存,Linux 会oom-killer终止 Cassandra。

    解决方案

    由于 CASSANDRA-8464 允许直接映射压缩数据,因此仅映射索引文件效率更高。

    在启动期间的默认设置下disk_access_mode: auto,Cassandra 会记录类似如下的条目:

    INFO  [main] 2019-05-02 12:33:21,572  DatabaseDescriptor.java:350 - \
      DiskAccessMode 'auto' determined to be mmap, indexAccessMode is mmap
    

    设置disk_access_mode为:mmap_index_only​cassandra.yaml

    disk_access_mode: mmap_index_only
    

    重新启动 Cassandra 后,日志中的条目将类似于以下内容:

    INFO [main] 2019-05-02 17:53:50,437 DatabaseDescriptor.java:356 - \
      DiskAccessMode is standard, indexAccessMode is mmap
    

    该日志条目表明 SSTable 数据文件使用标准磁盘 IO,但索引文件将映射到内存。

    致谢

    • 布拉尼米尔·兰波夫
    • 杰克·卢西亚尼
    • 马克·柯蒂斯
    • 迈克尔·基尼
    • 斯蒂芬妮·阿尔博盖蒂
    • 清陈
    • 邓炜

    该帖子转载自DataStax 支持知识库文章《升级到 DSE 5.0 或 DSE 5.1和DataStax 社区(已退役,优先用于 Stack Exchange 网络)》

    • 1

相关问题

  • 具有 1 个外部 IP 的 Cassandra 多数据中心配置

  • 迁移中的 Cassandra 升级/修复问题

  • Cassandra cqlsh 浏览器查询只能以字节为单位

  • 在 Cassandra 中使用许多(数千个)列族或键空间会有什么后果?

  • Cassandra 静态加密

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve