8201495: [Zero] Reduce limits of max heap size for boot JDK on s390

Volker Simonis volker.simonis at gmail.com
Mon Apr 16 10:01:07 UTC 2018


On Mon, Apr 16, 2018 at 11:30 AM, Severin Gehwolf <sgehwolf at redhat.com> wrote:
> Hi Andrew,
>
> On Mon, 2018-04-16 at 09:47 +0100, Andrew Haley wrote:
>> On 04/13/2018 02:40 PM, Severin Gehwolf wrote:
>> > ++ /usr/bin/tee /builddir/build/BUILD/java-9-openjdk-9.0.4.12-5.openjdk9.el7.s390/openjdk/build/jdk/modules/java.base/_the.java.base_batch.log
>> > ++ /usr/bin/tee /builddir/build/BUILD/java-9-openjdk-9.0.4.12-5.openjdk9.el7.s390/openjdk/build/jdk/modules/java.base/_the.java.base_batch.log
>> > Error occurred during initialization of VM
>> > Could not reserve enough space for 1048576KB object heap
>>
>> What is the root cause of this?  Is it that the system on which the build runs
>> cannot allocate all that memory?  Does not have that much memory?
>
> The configure code in JDK 9+ has this:
>
>   JVM_HEAP_LIMIT_32="1024"
>   # Running a 64 bit JVM allows for and requires a bigger heap
>   JVM_HEAP_LIMIT_64="1600"
>   STACK_SIZE_32=768
>   STACK_SIZE_64=1536
>   JVM_HEAP_LIMIT_GLOBAL=`expr $MEMORY_SIZE / 2`
>   if test "$JVM_HEAP_LIMIT_GLOBAL" -lt "$JVM_HEAP_LIMIT_32"; then
>     JVM_HEAP_LIMIT_32=$JVM_HEAP_LIMIT_GLOBAL
>   fi
>   if test "$JVM_HEAP_LIMIT_GLOBAL" -lt "$JVM_HEAP_LIMIT_64"; then
>     JVM_HEAP_LIMIT_64=$JVM_HEAP_LIMIT_GLOBAL
>   fi
>   if test "$JVM_HEAP_LIMIT_GLOBAL" -lt "512"; then
>     JVM_HEAP_LIMIT_32=512
>     JVM_HEAP_LIMIT_64=512
>   fi
>
>   if test "x$BOOT_JDK_BITS" = "x32"; then
>     STACK_SIZE=$STACK_SIZE_32
>     JVM_MAX_HEAP=$JVM_HEAP_LIMIT_32
>   else
>     STACK_SIZE=$STACK_SIZE_64
>     JVM_MAX_HEAP=$JVM_HEAP_LIMIT_64
>   fi
>
>
> Here's my reasoning:
>
> If I read this right then -Xmx will be bound above by 1/2 the hardware
> memory size. The set heap limit for that build was 1024M. It then
> follows that 1024M was less than 1/2 the hardware memory. Yet, it still
> failed to allocate required memory. So to answer your question: It
> looks like it was that the system wasn't able to allocate that much
> memory at the time.
>

Where do you get the "Before:" output from your initial mail:

Before:
checking flags for bootcycle boot jdk java command for big
workloads... -Xms64M -Xmx998M -XX:ThreadStackSize=768

with '-Xmx998M' if JVM_HEAP_LIMIT_32 was "1024" before your change ?

> Those builds run on systems I don't have access to, though. What's
> more, I don't have access to the build logs of that failed build any
> longer. From a successful s390 build with that patch I see:
>
> $ grep 'Memory limit' build.log
> * Memory limit:   5906 MB
>
> This seems suspiciously high for 32 bit (or 31 bit in this case). Maybe
> it gets the hardware memory size of the 64bit host system? We know this
> runs in mock chroots on s390x boxes.
>
> Thanks,
> Severin


More information about the build-dev mailing list