Java heap size defaults when running with CGroups in Linux.

David Holmes david.holmes at oracle.com
Thu Dec 1 04:35:23 UTC 2016


Hi Kirk,

On 1/12/2016 2:31 PM, kirk at kodewerk.com wrote:
> Hi all,
>
> This is a problem that everyone using Docker faces and it is a very common question, how do I configure the JVM when I’m using Docker. The number of parameters that have to be set in order to catch everything is daunting (through probably not necessary). For example, you wouldn’t believe how many people don’t know that there are machine sized resources in the JVM such as the shared F-J thread pool.

Note that the CPU issue is fixed in JDK 9 and 8u122.

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

David
-----

> Kind regards,
> Kirk
>
>> On Dec 1, 2016, at 1:10 AM, Steven Schlansker <stevenschlansker at gmail.com> wrote:
>>
>> We run in this configuration and I just want to point out that there's more going
>> on than simply correctly fixing heap size.  It's a great first start but we also found
>> that we had to spend a fair amount of time playing with all the other tuneables such
>> as Metaspace, Code Cache, etc. in order to get our Java apps to run stably
>> in cgroups.
>>
>> Not in anyway to argue against this change, just that it'd be nice to get the "big picture"
>> tackled at some point -- heap is only one part :)
>>
>> Thanks!
>> Steven
>>
>>> On Nov 30, 2016, at 2:53 PM, Mikael Vidstedt <mikael.vidstedt at oracle.com> wrote:
>>>
>>>
>>> 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