Cassandra 占用大量 CPU

Posted

技术标签:

【中文标题】Cassandra 占用大量 CPU【英文标题】:Cassandra takes up a lot of CPU 【发布时间】:2021-08-21 04:08:03 【问题描述】:

Cassandra 集群使用 3 个节点,其中因子为 3。当前 Cassandra 版本为 3.11.10,在执行修复操作之前,CPU 使用率超过 1000%。执行修复操作后,CPU使用率低于100%。必须每小时修复一次,否则CPU占用率会超过1000%。

目前Cassandra中总keyspace不超过6,总写入QPS小于1,总读取QPS小于2,总数据大小(所有keyspace)不超过500M。

Cassandra 配置(cassandra.yml)使用官方默认配置。

Cassandra的一致性级别是QUORUM

以下是一些 Cassandra 统计数据(通过 nodetool)

节点工具状态: enter image description here

nodetool tpstats: enter image description here

nodetool compactstats: enter image description here

CassandraDaemon jvm 选项:

/usr/lib/jvm/java-8u5-sun/bin/java -Xloggc:/data/cassandra/logs/gc.log -ea -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -XX:+HeapDumpOnOutOfMemoryError -Xss256k -XX:StringTableSize=1000003 -XX:+AlwaysPreTouch -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+UseNUMA -XX:+PerfDisableSharedMem -Djava.net.preferIPv4Stack=true -XX:+ UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=1 -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSWaitDuration=10000 -XX:+CMSParallelInitialMarkEnabled -XX:+CMSEdenChunksRecordAlways -XX:+CMSClassUnloadingEnabled -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+PrintPromotionFailure -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize =10M -Xms7938M -Xmx7938M -Xmn1984M -XX:+UseCondCardMark -XX:CompileCommandFile=./../conf/hotspot_compiler -javaagent:./.. /lib/jamm-0.3.0.jar -Dcassandra.jmx.local.port=7199 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/ jmxremote.password -Djava.library.path=./../lib/sigar-bin -XX:OnOutOfMemoryError=kill -9 %p -Dlogback.configurationFile=logback.xml -Dcassandra.logdir=/data/cassandra/logs - Dcassandra.storagedir=./../data -Dcassandra-pidfile=/data/cassandra/conf/pidfile -cp ./../conf:./../build/classes/main:./../build/类/thrift:./../lib/HdrHistogram-2.1.9.jar:./../lib/ST4-4.0.8.jar:./../lib/airline-0.6.jar:./. ./lib/antlr-runtime-3.5.2.jar:./../lib/apache-cassandra-3.11.10.jar:./../lib/apache-cassandra-thrift-3.11.10.jar: ./../lib/asm-5.0.4.jar:./../lib/caffeine-2.2.6.jar:./../lib/cassandra-driver-core-3.0.1-shaded.jar :./../lib/commons-cli-1.1.jar:./../lib/commons-codec-1.9.jar:./../lib/commons-lang3-3.1.jar:./.. /lib/commons-math3-3.2.jar:./../lib/compress-lzf-0.8.4.jar:./../lib/concurrent-trees-2.4.0.jar:./../ lib/concurrentlinkedhashmap-lr u-1.4.jar:./../lib/disruptor-3.0.1.jar:./../lib/ecj-4.4.2.jar:./../lib/guava-18.0.jar:. /../lib/high-scale-lib-1.0.6.jar:./../lib/hppc-0.5.4.jar:./../lib/jackson-annotations-2.9.10.jar: ./../lib/jackson-core-2.9.10.jar:./../lib/jackson-databind-2.9.10.4.jar:./../lib/jamm-0.3.0.jar:. /../lib/javax.inject.jar:./../lib/jbcrypt-0.3m.jar:./../lib/jcl-over-slf4j-1.7.7.jar:./../ lib/jctools-core-1.2.1.jar:./../lib/jflex-1.6.0.jar:./../lib/jna-4.2.2.jar:./../lib/joda -time-2.4.jar:./../lib/json-simple-1.1.jar:./../lib/jstackjunit-0.0.1.jar:./../lib/libthrift-0.9.2。 jar:./../lib/log4j-over-slf4j-1.7.7.jar:./../lib/logback-classic-1.1.3.jar:./../lib/logback-core-1.1 .3.jar:./../lib/lz4-1.3.0.jar:./../lib/metrics-core-3.1.5.jar:./../lib/metrics-jvm-3.1。 5.jar:./../lib/metrics-logback-3.1.5.jar:./../lib/netty-all-4.0.44.Final.jar:./../lib/ohc-core -0.4.4.jar:./../lib/ohc-core-j8-0.4.4.jar:./../lib/reporter-config-base-3.0.3.jar:./../ lib/reporter-config3-3.0.3.jar:./../lib/sigar-1.6.4.jar:./../lib/slf4j-api -1.7.7.jar:./../lib/snakeyaml-1.11.jar:./../lib/snappy-java-1.1.1.7.jar:./../lib/snowball-stemmer-1.3。 0.581.1.jar:./../lib/stream-2.5.2.jar:./../lib/thrift-server-0.3.7.jar:./../lib/jsr223/ /.jar: -XX:HeapDumpPath=/data/cassandra/logs/dump.log -XX:ErrorFile=/data/cassandra/logs/error.log org.apache.cassandra.service.CassandraDaemon

【问题讨论】:

【参考方案1】:

您需要对 Cassandra 进程进行线程转储以诊断问题。

您需要分析线程转储以确定哪些线程使用的 CPU 最多。了解最繁忙的线程将为您提供有关 CPU 使用率高的原因的线索。

很遗憾,您发布的数据不足以确定导致问题的原因。干杯!

【讨论】:

thelastpickle.com/blog/2018/01/16/cassandra-flame-graphs.html 很有用

以上是关于Cassandra 占用大量 CPU的主要内容,如果未能解决你的问题,请参考以下文章

Cassandra数据存储:数据目录空间不等于占用空间

cassandra使用java驱动读取大量数据

c#如何向Cassandra表中插入大量数据

Cassandra-2.1.2 中的范围扫描需要大量时间

Cassandra 修复 - 在启用 Leveled Compaction 的情况下进行增量修复时的大量流式传输

认识Cassandra