3

我不是关于 Cassandra 的专家。几个月前,我接到了为社交网络应用程序建立数据库的订单。由于我从网络中引用的许多原因,我选择 Cassandra 来存储所有提要的元数据,并选择 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 节点用完了这么多。甚至一个节点也可以达到 CPU 的 1400%,然后下降到 0.5%。我真的不知道为什么。谁能告诉我为什么?如果可能的话,请告诉我处理它的解决方案。提前致谢!

4

1 回答 1

2

检查调试日志信息后,我想我抓住了问题的根源。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 周期。但是将其设置为较低的值会降低性能。谁能告诉我我必须做什么??

于 2013-05-08T11:27:28.050 回答