私は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)
をこれは、Javaが、Linuxの問題ではない、なぜ問題があるので、私見他のサイト(superuser.comまたはaksubuntu.com)のいずれかに求めるべきですシステムの空きメモリが非常に少ない。 – Axel
はい、不思議ですが、 'strace java -Xms32m -Xmx512m -version'を試してください。実際に何がシステムコールに失敗するかを知ることができます。 – cruftex