我們嘗試了一下與卡桑德拉最近(1.0.7版本),我們似乎有一些問題的內存。我們使用EC2作爲測試環境,我們有三個節點,內存3.7G,核心2.4G,全部運行Ubuntu 11.10。卡桑德拉運行內存(堆空間)
的問題是,我們從舊貨接口擊中節點定期死亡(約後,我們存儲數據的2-2.5G)。錯誤消息:OutOfMemoryError:Java堆空間並根據日誌實際上使用了所有分配的內存。
的節點是相對恆定的載荷下和存儲關於2000-4000行鍵一分鐘,這是通過在10-30行鍵的TRIFT接口一次分批(每個約50列)。讀取次數非常低,每天約1000-2000次,只需要一個單一行密鑰的數據。目前只有一個使用過的列族。
最初的想法是cassandra-env.sh文件中出現錯誤。所以,我們根據節點的規範指定了變量'system_memory_in_mb'(3760)和'system_cpu_cores'(1)。我們還將'MAX_HEAP_SIZE'更改爲2G,將'HEAP_NEWSIZE'更改爲200M(我們認爲第二個與垃圾收集相關)。不幸的是,這並沒有解決問題,我們通過節儉擊中的節點不斷定期死亡。
如果你覺得這個有用,交換關閉,所有3臺服務器上的不可修復內存似乎非常高(2.3GB,我們通常會觀察其他Linux服務器上的不可修復內存量約爲0-16KB)不太清楚不可預測的記憶如何與Cassandra聯繫起來,它只是我們在觀察問題時觀察到的)。 CPU在整個時間都非常空閒。隨着時間的推移,堆內存顯然會逐漸減少,但顯然隨着時間的推移而增長。
任何想法?提前致謝。
你在運行什麼版本的Cassandra?另外,您可以將其發佈到Cassandra用戶列表中,因爲它是獲得有關此類事情建議的非常活躍的地方。 – dmcnelis 2012-04-03 14:25:59
感謝您的評論。它是1.0.7。我更新了問題以顯示我們正在運行的Cassandra的版本。我也將搜索Cassandra用戶列表。謝謝。 – Bill 2012-04-04 12:06:09
你是否啓用緩存?行緩存可以真正殺死你的內存。另外,您是否手動指定提交日誌閾值或更改cassandra.yaml中的任何內存內容? – Zanson 2012-04-09 23:47:42