Ubuntu上的Java内存不足,但有大量缓存内存

6

我有一个安装有ubuntu 14.04操作系统,4GB内存,x86_64 3.13.0-48-generic内核和openjdk-7的系统。

我的内存使用情况如下:

# 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?我在同一台机器上运行了PostgreSQL,但它的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.

编辑2:

这里是 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

编辑3:

我完全不理解:我尝试添加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
是的,很奇怪,请尝试使用“strace java -Xms32m -Xmx512m -version”命令,这样您就可以看到实际失败的系统调用。 - cruftex
2个回答

2
你需要运行一些东西。
例如:
java -Xmx1024m -cp /path/to/jar/ com.project.Start

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接