Docker(LXC)容器中的JVM内存分配

我们已经dockerized一个JVM(Scala)应用程序,Java 1.7,并试图决定如何分配内存。 我们有一个应用程序在Docker容器中运行。 如果Docker容器分配了4GB的内存,我们是否应该为JVM分配4GB(或者为了安全起见,可能less一些)?

据我了解,除了从入口点调用Docker容器内部没有其他进程运行,所以我们不应该担心非JVM内存使用 – 是真的,还是过度简化? 还有其他问题我们应该问?

编辑我们使用Mesos / Marathon来部署Docker镜像 – 我相信它确实在内存上设置了cgroup限制(至less它给人的印象是这样),但我肯定是错的。

我有相同的情况,我使用jvm的90%的保留内存,工作得很好

为了您的问题,像在主机上运行的进程一样处理您的容器。

一个在主机上运行的进程,虽然有自己的networking,进程等命名空间。

你甚至不把“内存”分配给一个容器; 你可以限制 ,如果你喜欢通过cgroups,但由于JVM有自己的限制,这是不必要的。

最后,在这种情况下,你正在控制虚拟内存的使用,而不是RAM。

你不能给-Xmx与容器内存相同的值,因为Java将需要更多的空间来永久生成(permgen),代码caching等等。 其他容器环境中有一个工具,Warden。 工具在这里 :我认为它也可以在Docker中使用。 需要testing。