2013-06-27 40 views
1

我們目前正在使用ab工具進行一些壓力測試。單個插入在cassandra中表現很好。但是,當涉及到批量插入時,我正在處理java內存不足錯誤:Java堆空間。cassandra java堆空間問題phpcassa

我有一個虛擬盒機與安裝在它與2G的內存

Ubuntu的服務器13.04我不知道很多關於卡桑德拉內部配置。

我只是做一個大小爲100的批量插入(100插入在BATCH)。

之後我看到這個錯誤,我不再用cqlsh訪問,沒有nodetool訪問近1個小時。

我該如何解決這個重負荷的錯誤?

注意:它不會發生在具有HTTP POST請求的單個插入。

注:在我的專欄的家人,我有一個TimeUUIDType鍵和列值int S和varchar小號

UPDATE:測試結果表明,我沒有任何東西之前6000級的要求是錯誤的。但是,涉及到7000時,php代碼會拋出以下內容;

Error connecting to 127.0.0.1: Thrift\Exception\TTransportException: TSocket: timed out reading 4 bytes from 127.0.0.1:9160

Morever,卡桑德拉登錄重物以下;

WARN [ScheduledTasks:1] 2013-06-28 03:43:07,931 GCInspector.java (line 142) 
Heap is 0.9231763795560355 full. You may need to reduce memtable and/or cache sizes. 
Cassandra will now flush up to the two largest memtables to free up memory. Adjust 
flush_largest_memtables_at threshold in cassandra.yaml if you don't want Cassandra to 
do this automatically 
+0

聽起來像虛擬機上的JVM存在問題,您分配了多少內存? –

+0

@LyubenTodorov在哪裏可以找出多少jvm使用?它是用'cassandra-env.sh'寫的嗎? – aacanakin

+0

檢查我的更新,但是它是'cassandra-env.sh'! –

回答

2

批次聽起來不像一個足夠大的數據集導致內存不足的問題,所以這聽起來像在虛擬機上使用JVM的一個問題。你分配了多少內存?

可以通過啓動JConsole的檢查並查看「記憶」標籤,具體的值(只是在終端/提示輸入JConsole的)Max下:

JVM Memory Stats


還可以得到一些由於C *的啓動腳本中包含的XX:+HeapDumpOnOutOfMemoryError參數導致崩潰的詳細信息,它基本上是一個存儲引起內存問題的堆棧跟蹤的日誌文件。

通常,堆大小由cassandra-env.sh中的calculate_heap_sizes()函數自動計算。但是,您可以覆蓋通過將MAX_HEAP_SIZE設置爲不同值而生成的函數編號。在cassandra-env.sh JVM_OPTS="$JVM_OPTS -Xmx${MAX_HEAP_SIZE}"的175行174 & 175中使用相同的變量來設置最小和最大堆大小。

+0

當我開始/停止cassandra服務時,我得到以下內容; 'xss = -ea -javaagent:/usr/share/cassandra/lib/jamm-0.2.5。jar -XX:+ UseThreadPriorities -XX:ThreadPriorityPolicy = 42 -Xms1001M -Xmx1001M -Xmn100M -XX:+ HeapDumpOnOutOfMemoryError -Xss180k'因此我猜測它大概在1G – aacanakin

+0

@aacanakin應該多說了吧,outofmemory堆棧跟蹤顯示了什麼? –

+0

看來我錯過了這些日誌。目前,我正在處理重新啓動測試,但我現在沒有cqlsh訪問權限 – aacanakin