我将系统从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软链接,因此命令行中的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
然而,不确实改变了我仍然需要在内存方面有一个很大的上限的事实。
答案 0 :(得分:2)
应用程序,库甚至核心Java的内存使用情况如有变更,恕不另行通知。您应该期望记录特别大的变化,但在大多数情况下,这里或那里将有几百MB。
一般的说法是,在大多数情况下,随着软件的发展,内存使用量会增加。随着程序变得越来越大,获得更多功能等,它们也会消耗更多内存。查看执行特定工作的特定软件需要多少内存的唯一方法是测试它 - 以及软件版本是否会再次测试它。
最简单的方法就是确保首先分配足够的净空,小幅增加不会成为问题。