2013-05-07 36 views
3

我不是卡桑德拉的專家。幾個月前,我得到了爲社交網絡應用程序建立數據庫的命令。由於我從網絡引用的許多原因,我選擇Cassandra將所有提要和redis的元數據存儲到商店列表,zset或id(輕量級和大部分更改的數據)。我的Cassandra集羣包括4個節點,複製因子設置爲2,2個服務器中有4個節點(每個服務器有2個節點)。我配置了cassandra.yaml以儘可能快地調整Cassandra集羣。 我的系統似乎一直很好,直到我查看系統狀態爲止。這太不可思議了。讓我來解釋爲什麼:爲什麼卡桑德拉用盡了這麼多的CPU

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%。我真的不知道爲什麼。誰能告訴我爲什麼?如果可能的話,請告訴我解決方案。提前致謝!

+0

您是否在使用Hadoop? – Cmag 2013-05-07 14:27:19

+0

@John Tran你使用Oracle JDK和Ubuntu嗎? – 2013-05-08 07:13:12

+0

是的,我在cent os 6上使用JDK 6. java版本的細節如下: java版本「1.6.0_24」 OpenJDK運行環境(IcedTea6 1.11.3)(rhel-1.48.1.11.3.el6_2-x86_64 ) OpenJDK 64位服務器虛擬機(構建20.0-b12,混合模式) – John 2013-05-08 07:22:16

回答

2

檢查調試日誌信息後,我想我發現了我的問題的來源。由於其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過程。但將其設置爲較低值可能會降低性能。 誰能告訴我我必須做什麼?

+1

查看https://issues.apache.org/jira/browse/CASSANDRA-8150 – phact 2014-12-23 17:01:51