2015-12-04 158 views
6

我得到了一個帶有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) 
+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