我得到了一個帶有4GB RAM,x86_64 3.13.0-48-通用內核和openjdk-7的ubuntu 14.04系統。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。
編輯:
我強制刷新磁盤高速緩存 - 還是一樣的結果:
# 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