我将我的系统从13.04升级到13.10后,我无法启动Cassandra了,出现了内存溢出错误,即使此时我所做的一切只是启动服务器,堆栈也已经满了。 我使用 -Xmx1992m(默认值)将最大堆大小增加到 -Xms2500m。我想知道为什么需要这样做?可能是在运行Linux内核3.5.0和移动到内核3.11.0之间,内存稍微减少了一点,会对Cassandra产生影响吗?比如说,我“丢失”了200M,现在与以前的内核相比,它分配的是1992Mb而不是2192Mb,这可能吗?我的担忧是,每次升级都可能遇到这样的问题,除非我强制将最大堆大小设置为固定数字(而不是让脚本动态确定要使用的Mb)。另外,我不能一直增加限制。我的RAM是有限的...(显然)。在启动Cassandra时,显示以下内容(在此处断开3行以便更容易阅读):
xss = -ea -javaagent:bin/../lib/jamm-0.2.5.jar -XX:+UseThreadPriorities
-XX:ThreadPriorityPolicy=42 -Xms1994M -Xmx2500M -Xmn400M
-XX:+HeapDumpOnOutOfMemoryError -Xss256k
更新:
糟糕!它仍然在启动OpenVMS,因为$JAVA_HOME变量指向了/usr/lib/jvm/default-java(它在/etc/environment中定义):
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
然后运行以下两个命令以使Oracle运行:
sudo rm /usr/lib/jvm/default-java
sudo ln -s java-7-oracle /usr/lib/jvm/default-java
然而,这并没有改变事实,即我仍需要有一个大的内存上限。
/usr/lib/jvm/default-java/bin/java
,看起来应该是OpenJVM。啊! - Alexis Wilke