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

Severin Gehwolf sgehwolf at redhat.com
Mon Apr 16 10:13:00 UTC 2018


On Mon, 2018-04-16 at 12:01 +0200, Volker Simonis wrote:
> 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:

>From a time-shared s390x box where I've created a s390 chroot manually.
 
It's not the same system as where the builds run. I don't have access
to systems running builds unfortunately.

> 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 ?

Right. This particular system where I ran this on has 1997MB memory
(according to free -m). Since 1997/2 ~= 998 and 998 < 1024 that's
what's getting used.

Does that make sense?

Thanks,
Severin


More information about the build-dev mailing list