Java heap size defaults when running with CGroups in Linux.

David Holmes david.holmes at oracle.com
Thu Dec 8 07:44:24 UTC 2016


I have filed:

https://bugs.openjdk.java.net/browse/JDK-8170888

"[linux] Experimental support for cgroup memory limits in container (ie 
Docker) environments"

to try and get this into 9. Will try to test tomorrow and send out RFR, 
while we await approval (or not).

Proposed flag name is now: UseCGroupMemoryLimitForHeap

Thanks,
David

On 2/12/2016 11:57 AM, David Holmes wrote:
> On 2/12/2016 12:50 AM, Christine Flood wrote:
>> Unfortunately, if you aren't actually inside a cgroup,
>> /sys/fs/cgroup/memory/memory.limit_in_bytes still exists and contains
>> an apparently bogus value.  I've got a question in to the docker folks
>> to find out why.
>
> Is that the "unlimited" value that you get even if running in a cgroup
> but without setting a memory limit?
>
> As I wrote in the bug report when initially investigating this there
> seem to be a lot of issues with even knowing what to read:
>
> "/sys/fs/cgroup/ is the recommended location for cgroup hierarchies, but
> it is not a standard. If a tool or library is trying to read from it,
> and be portable across multiple container implementations, it would need
> to discover the location first by parsing /proc/self/cgroup and
> /proc/self/mountinfo. Further, /sys/fs/cgroup is just an umbrella for
> all cgroup hierarchies, there is no recommendation or standard for my
> own cgroup location."
>
> https://fabiokung.com/2014/03/13/memory-inside-linux-containers/
>
>> In the short term, providing a runtime flag gives us a way to protect
>> customers that are running inside a container and not change the
>> current behavior for everyone else.
>
> Ok - at best this enhancement would be an experimental flag that users
> would have to opt in to.
>
> But the enhancement door is barely still open for JDK 9.
>
> David
> -----
>
>> Christine
>>
>> ----- Original Message -----
>>> From: "Mikael Vidstedt" <mikael.vidstedt at oracle.com>
>>> To: "Christine Flood" <chf at redhat.com>
>>> Cc: hotspot-dev at openjdk.java.net
>>> Sent: Wednesday, November 30, 2016 5:53:41 PM
>>> Subject: Re: Java heap size defaults when running with CGroups in Linux.
>>>
>>>
>>> Out of curiosity, why wouldn’t this be the default behavior? That is, in
>>> which cases is it not a good idea to use the cgroup information when
>>> sizing
>>> the JVM?
>>>
>>> Cheers,
>>> Mikael
>>>
>>>
>>>> On Nov 30, 2016, at 1:59 PM, Christine Flood <chf at redhat.com> wrote:
>>>>
>>>>
>>>> The problem is that when running the JVM inside of a cgroup, such as
>>>> docker, the JVM bases it's default heap parameters on the size of the
>>>> whole machine's memory not on the memory available to the
>>>> container.  This
>>>> causes errors as discussed on this blog entry.
>>>> http://matthewkwilliams.com/index.php/2016/03/17/docker-cgroups-memory-constraints-and-java-cautionary-tale/
>>>>
>>>>
>>>> Basically the JVM dies in a non-obvious manner.
>>>>
>>>> The solution I propose is to add a parameter -XX:+UseCGroupLimits to
>>>> the
>>>> JVM which states that you should look to the CGroup when calculating
>>>> default heap sizes.
>>>>
>>>> Webrev is here:
>>>> http://cr.openjdk.java.net/~andrew/rh1390708/webrev.01/
>>>>
>>>>
>>>> Christine
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>>


More information about the hotspot-dev mailing list