我将系统从 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,因为指向 /usr/lib/jvm/default-java 的 $JAVA_HOME 变量(它在 /etc/environment 中定义):
JAVA_HOME=/usr/lib/jvm/default-java
不知何故,它在那里被设置回 OpenVMS。尽管我更改了 /etc/alternatives/java 软链接,因此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
但是,这并没有改变我仍然需要在内存方面有一个很大的上限的事实。