2015-12-04 12 views
6

私はubuntu 14.04システムに4GB RAM、x86_64 3.13.0-48-一般カーネル、openjdk-7を持っています。ubuntuのJavaはメモリが足りませんが、キャッシュメモリがたくさんあります

私の記憶は、以下のように使用されます。

# free -h 
      total  used  free  shared buffers  cached 
Mem:   3.7G  3.6G  127M  988M  44M  3.3G 
-/+ buffers/cache:  232M  3.4G 
Swap:   0B   0B   0B 

ので、任意のアプリがそれを必要なときにフラッシュし(私の知る限り)解放されるべきディスクキャッシュとして使用するメモリの多くは、そこにあります。

だから、私は、javaを実行しよう:

# java -Xms32m -Xmx512m -version 
Error occurred during initialization of VM 
Could not reserve enough space for object heap 
Error: Could not create the Java Virtual Machine. 
Error: A fatal exception has occurred. Program will exit. 

はちょうどjava -version戻って同じ結果を実行しています。 3GBのキャッシュメモリがあるときにJavaを実行できないのはなぜですか? PostreSQLは同じマシンで動作していますが、shared_buffersは940MBに設定されています。

編集:

Iディスクキャッシュ力 - フラッシュ - まだ同じ結果:

# free -h 
      total  used  free  shared buffers  cached 
Mem:   3.7G  1.9G  1.8G  988M  35M  1.7G 
-/+ buffers/cache:  196M  3.5G 
Swap:   0B   0B   0B 
# java -Xms32m -Xmx512m -version 
Error occurred during initialization of VM 
Could not reserve enough space for object heap 
Could not create the Java virtual machine. 

EDIT2:ここ

ulimit -aです:

# ulimit -a 
core file size   (blocks, -c) 0 
data seg size   (kbytes, -d) unlimited 
scheduling priority    (-e) 0 
file size    (blocks, -f) unlimited 
pending signals     (-i) 30034 
max locked memory  (kbytes, -l) 64 
max memory size   (kbytes, -m) unlimited 
open files      (-n) 1024 
pipe size   (512 bytes, -p) 8 
POSIX message queues  (bytes, -q) 819200 
real-time priority    (-r) 0 
stack size    (kbytes, -s) 32000 
cpu time    (seconds, -t) unlimited 
max user processes    (-u) 30034 
virtual memory   (kbytes, -v) unlimited 
file locks      (-x) unlimited 

EDIT3:

私は完全にそれを得ることはありません:私は4GBのスワップを追加しようとしましたし、スワップが使用されていないが、その結果は、それが動作することである:

# free -h 
      total  used  free  shared buffers  cached 
Mem:   3.7G  3.5G  196M  988M  44M  3.2G 
-/+ buffers/cache:  239M  3.4G 
Swap:   4.0G   0B  4.0G 
# java -version 
java version "1.6.0_36" 
OpenJDK Runtime Environment (IcedTea6 1.13.8) (6b36-1.13.8-0ubuntu1~14.04) 
OpenJDK 64-Bit Server VM (build 23.25-b01, mixed mode) 
+1

をこれは、Javaが、Linuxの問題ではない、なぜ問題があるので、私見他のサイト(superuser.comまたはaksubuntu.com)のいずれかに求めるべきですシステムの空きメモリが非常に少ない。 – Axel

+0

はい、不思議ですが、 'strace java -Xms32m -Xmx512m -version'を試してください。実際に何がシステムコールに失敗するかを知ることができます。 – cruftex

答えて

2

あなたが何かを実行する必要があります。

java -Xmx1024m -cp /path/to/jar/ com.project.Start 
1

Javaのような

は、正しい答えを提供します。あなたはこのヒープサイズのためにそのマシンに十分な空きメモリがありません。

このマシンでtopとShift + Mを試しましたか?あなたのマシンにはたくさんのバッファリングされたものがあります。それは本当です。

スワップパーティションを追加しない理由は何ですか?

また、あなたはここで確認できます。http://javahowto.blogspot.de/2006/06/6-common-errors-in-setting-java-heap.html