为什么Cassandra会占用这么多cpu

ws51t4hk  于 2021-06-15  发布在  Cassandra
关注(0)|答案(1)|浏览(518)

我不是Cassandra的Maven。几个月前,我接到一个为社交网络应用程序建立数据库的命令。由于许多原因,我从网络上引用,我选择cassandra来存储所有feed的元数据,redis来存储list、zset或id(轻量级和更改最多的数据)。我的cassandra集群包括4个节点,其中replicate factor设置为2,2个服务器中有4个节点(每个服务器有2个节点)。我将cassandra.yaml配置为尽可能快地调优cassandra集群。我的系统似乎一直很好,直到有一天我审查系统统计。这是难以置信的。让我解释一下原因:

First: I type "iostat -x 5" to view io stat. The result is as following:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.35    0.00    0.82    0.08    0.00   98.75

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    2.80     0.00    22.40     8.00     0.01    4.50   3.93   1.10
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdd               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdc               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

这里的cpu是0.35%,虽然我们只有4000个活跃用户,但io还不是我的问题。问题就在这里。

PID  USER      PR   NI VIRT  RES  SHR S  %CPU  %MEM  TIME+   COMMAND

4689 root      20   0 13.1g 6.8g 182m S 514.6 21.8  37374:09 java      5029 root      20   0 13.0g 6.7g 174m S  1.7 21.5  10113:45 java

cassandra节点的cpu占用太多。甚至一个节点的cpu占用率也可能高达1400%,之后又降到0.5%。我真的不知道为什么。谁能告诉我为什么?如果可能的话,请告诉我解决方法。提前谢谢!

ryoqjall

ryoqjall1#

检查调试日志信息后,我想我找到了问题的根源。cassandra由于其gc占用了大量cpu周期。
下面是一个日志跟踪:

INFO [ScheduledTasks:1] 2013-05-08 18:20:38,334 GCInspector.java (line 122) GC for ParNew: 269 ms for 1 collections, 3367771984 used; max is 6358564864

每次gc运行时,cpu周期都会增加。在我的设置中,我将堆内存设置为6gb,我认为当cassandra进行gc处理时,这将导致占用大量cpu周期。但将其设置为较低的值会降低性能。谁能告诉我我必须做什么??

相关问题