在docker中运行时,java程序的内存耗尽了什么

时间:2018-02-20 15:05:38

标签: java docker

我有一个java程序,其唯一的功能是使用大约512M RAM并且空闲。本地运行它有效:

java -Xmx559m MemoryEater

当我在Docker中使用相同的内存设置运行相同的程序时,Java会因内存不足错误而出错。这是java不是docker杀死它。我必须将堆大小增加一倍才能成功运行。

docker run -it --rm -e JAVA_OPTIONS='-Xmx1027m' memory-eater memory-eater

这是为什么?我确实尝试设置不同级别的docker --memory和--memory-swap,但始终需要1027m的堆大小。

其他信息:

错误讯息:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at MemoryEater.main(MemoryEater.java:10)

程序:

import java.util.Vector;

public class MemoryEater
{
  public static void main(String[] args)
  {
    Vector v = new Vector();
    for( int i=1; i<512; i++)
    {
      byte b[] = new byte[1048576];
      v.add(b);
      Runtime rt = Runtime.getRuntime();
      System.out.println( "i = " + i + " free memory: " + rt.freeMemory() + " max memory: " + rt.maxMemory() + " total memory: " + rt.totalMemory() );

    }
    while( true ){}
  }
}

原生和容器都是64位。

0 个答案:

没有答案