我將系統從13.04升級到13.10,我無法再啓動Cassandra,出現內存不足錯誤,所以即使堆已滿我當時所做的只是啓動服務器。Cassandra在啓動時生成「java.lang.OutOfMemoryError:Java堆空間」錯誤
我進去了,用-Xmx1992m(默認值)增加了最大堆大小爲-Xms2500m。
我想知道爲什麼需要做這樣的事情?難道內存在運行Linux內核3.5.0和移植到內核3.11.0之間有所下降,這可能會影響Cassandra嗎? (即說我「失去」200M,現在它分配1992Mb而不是2192Mb與以前的內核,可能是??)
我在這裏關心的是,任何時候我升級我可以運行在這樣的問題,除非我強制將最大堆大小強制爲一個固定的數字(而不是讓腳本確定Mb動態使用)。另外,我不能永遠繼續增加限制。我的內存是有限的......(顯然)
在啓動時卡桑德拉顯示以下(破3線,使其更容易讀到這裏):
xss = -ea -javaagent:bin/../lib/jamm-0.2.5.jar -XX:+UseThreadPriorities
-XX:ThreadPriorityPolicy=42 -Xms1994M -Xmx2500M -Xmn400M
-XX:+HeapDumpOnOutOfMemoryError -Xss256k
更新:
啊!它仍然是啓動OpenVMS的,因爲它指向/ usr/lib中/ JVM /默認的Java的$ JAVA_HOME變量(它是在/ etc /環境中定義):
JAVA_HOME=/usr/lib/jvm/default-java
而且在某種程度上它是設置回的OpenVMS那裏。儘管我更改了/ etc/alternatives/java softlink,因此我的命令行中的java -version
「正常工作」(返回我所期望的),Cassandra啓動腳本使用$JAVA_HOME
變量!
所以我檢查可用的虛擬機與列表:
ls -l /usr/lib/jvm
lrwxrwxrwx 1 root root 24 Apr 27 2012 default-java -> java-1.7.0-openjdk-amd64
drwxr-xr-x 4 root root 4096 Feb 23 17:54 java-1.5.0-gcj-4.8-amd64
lrwxrwxrwx 1 root root 20 Sep 2 2012 java-1.6.0-openjdk-amd64 -> java-6-openjdk-amd64
lrwxrwxrwx 1 root root 20 Jul 3 2013 java-1.7.0-openjdk-amd64 -> java-7-openjdk-amd64
drwxr-xr-x 5 root root 4096 Oct 7 2012 java-6-openjdk-amd64
drwxr-xr-x 3 root root 4096 Oct 7 2012 java-6-openjdk-common
drwxr-xr-x 5 root root 4096 Sep 21 20:06 java-7-openjdk-amd64
drwxr-xr-x 8 root root 4096 Sep 18 21:18 java-7-oracle
,並運行以下兩個命令來獲得甲骨文運行:
sudo rm /usr/lib/jvm/default-java
sudo ln -s java-7-oracle /usr/lib/jvm/default-java
然而,這並不變化的事實。我仍然需要在內存方面有很大的上限。
32位或64位jvm? –
哦!我想把參數和這樣的信息。我在64位。使用Oracle時,雖然它在OpenJVM上設置,但重新啓動後才發現,直到我測試完成後才發現,所以它在OpenJVM中嘗試了幾次。兩個版本7. –
哦!我將選擇改爲Oracle,但看起來這還不夠。它使用'/ usr/lib/jvm/default-java/bin/java',它看起來像是OpenJVM。 Arrrgh! –