首页 文章

为什么cassandra耗尽了这么多的CPU

提问于
浏览
3

我不是Cassandra的专家 . 几个月前,我收到了为社交网络应用程序 Build 数据库的命令 . 由于我从网络引用的很多原因,我选择Cassandra来存储所有Feed的元数据,并选择redis来存储列表,zset或id(轻量级和大多数更改的数据) . 我的Cassandra集群包括4个节点,复制因子设置为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

CPU cassandra节点用得太多了 . 即使一个节点可以高达1400%的CPU,然后降低到0.5% . 我真的不知道为什么 . 谁能告诉我为什么?如果可能的话,请告诉我处理它的解决方案 . 提前致谢!

1 回答

  • 2

    检查调试日志信息后,我想我 grab 了问题的根源 . 由于GC,Cassandra占用了大量的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,我认为它将导致消耗大量的CPU周期,而Cassandra执行GC处理 . 但是将其设置为较低的值可以降低性能 . 谁能告诉我我必须做些什么?

相关问题