RFR(XS): 8204652: [aix] fix thread stack allocation, too big stack sizes not recognized

Lindenmaier, Goetz goetz.lindenmaier at sap.com
Mon Jun 11 09:47:21 UTC 2018


Hi,

Is this better?
http://cr.openjdk.java.net/~goetz/wr18/8204652-aixHugeStacksCrash/02/

It reports now:
bin/java -XX:CompilerThreadStackSize=80000000000000
[1.989s][warning][os,thread] The compiler thread stack size specified is invalid: 80000000000000k
Error occurred during initialization of VM
java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached

Best,
  Goetz.

> -----Original Message-----
> From: David Holmes [mailto:david.holmes at oracle.com]
> Sent: Montag, 11. Juni 2018 10:36
> To: Lindenmaier, Goetz <goetz.lindenmaier at sap.com>; Thomas Stüfe
> <thomas.stuefe at gmail.com>
> Cc: hotspot-runtime-dev at openjdk.java.net
> Subject: Re: RFR(XS): 8204652: [aix] fix thread stack allocation, too big stack
> sizes not recognized
> 
> On 11/06/2018 6:07 PM, Lindenmaier, Goetz wrote:
> > Hi,
> >
> > Yes, reporting the pthread_create is a bit misleading. But it is the same
> > as reported on linux x86_64:
> >
> > bin/java -XX:CompilerThreadStackSize=8000000000000
> > [0.271s][warning][os,thread] Failed to start thread - pthread_create failed
> (EAGAIN) for attributes: stacksize: 8000000000000k, guardsize: 0k, detached.
> > Error occurred during initialization of VM
> > java.lang.OutOfMemoryError: unable to create native thread: possibly out
> of memory or process/resource limits reached
> 
> But on linux you _do_ call pthread_create and it did fail!
> 
> > As we know linux is bad at implementing the pthread functionality here:
> > It accepts setting the big value as stack size, and only when you call create
> > you get the failure.
> 
> Does POSIX require otherwise?
> 
> > So it's not true that the VM starts with any other value, it also crashes on
> > linux.  And you get the same output as on linux. So I realy don't want to
> > start implementing any clever tracing, or even implement other stack
> > handling (setting defaults) as on linux.  I would just like to keep it as is.
> > Currently we get a SIGSEGV which is hard to debug on aix.
> 
> The point is the error should be reported accurately in the logging
> information. It's not coming from pthread_create in your AIX case so
> don't report that it is.
> 
> David
> 
> > Best,
> >    Goetz
> >
> >> -----Original Message-----
> >> From: Thomas Stüfe [mailto:thomas.stuefe at gmail.com]
> >> Sent: Montag, 11. Juni 2018 06:26
> >> To: Lindenmaier, Goetz <goetz.lindenmaier at sap.com>
> >> Cc: hotspot-runtime-dev at openjdk.java.net
> >> Subject: Re: RFR(XS): 8204652: [aix] fix thread stack allocation, too big
> stack
> >> sizes not recognized
> >>
> >> Hi Goetz,
> >>
> >> On Sun, Jun 10, 2018 at 9:11 PM, Lindenmaier, Goetz
> >> <goetz.lindenmaier at sap.com> wrote:
> >>> Hi Thomas,
> >>>
> >>> The stack is started with 192k.  See the output:
> >>>
> >>
> >> Ah you are right. With 64K pages this would not be enough to establish
> >> red/yellow zones and still have breathing space left.
> >>
> >>> bash-4.4$ ~/oJ/vms/aix_j-1/bin/java -
> >> XX:CompilerThreadStackSize=8000000000000
> >>> [1.482s][warning][os,thread] The compiler thread stack size specified is
> >> invalid: 8000000000000k
> >>> [1.483s][warning][os,thread] Failed to start thread - pthread_create
> failed
> >> (22=EINVAL) for attributes: stacksize: 192k, guardsize: 4k, detached.
> >>> Error occurred during initialization of VM
> >>> java.lang.OutOfMemoryError: unable to create native thread: possibly
> out
> >> of memory or process/resource limits reached
> >>>
> >>> I think the output is not that bad ...
> >>
> >> See my mail to David: I think the output is misleading, since
> >> pthread_create() did not even run. So, "pthread_create failed" is
> >> wrong.
> >>
> >> Best Regards, Thomas
> >>
> >>>
> >>> Best,
> >>>    Goetz.
> >>>
> >>>> -----Original Message-----
> >>>> From: Thomas Stüfe <thomas.stuefe at gmail.com>
> >>>> Sent: Sunday, June 10, 2018 7:33 PM
> >>>> To: Lindenmaier, Goetz <goetz.lindenmaier at sap.com>
> >>>> Cc: hotspot-runtime-dev at openjdk.java.net
> >>>> Subject: Re: RFR(XS): 8204652: [aix] fix thread stack allocation, too big
> >> stack
> >>>> sizes not recognized
> >>>>
> >>>> Hi Goetz,
> >>>>
> >>>> I see what you intent to do, but I think we need to think about error
> >>>> handling a bit more. The pattern here (which was broken you try to fix
> >>>> it with this patch) is that we try, sequentially:
> >>>>
> >>>> - pthread_attr_setstacksize()
> >>>>
> >>>> - if ok-so-far pthread_attr_setguardsize
> >>>>
> >>>> - if ok-so-far pthread_ceate
> >>>>
> >>>> - logging and error handling
> >>>>
> >>>>
> >>>> Problem with that is that in the end, we log information about a
> >>>> failing thread creation, printing errno as if pthread_create() failed,
> >>>> but that errno may have come actually from one of the preceeding OS
> >>>> calls. So the error message would be misleading.
> >>>>
> >>>> I think it would be better to handle errors of each system call explicitly:
> >>>>
> >>>> pthread_attr_setstacksize()
> >>>> if failed
> >>>>     - log out "pthread_attr_setsize failed" and errno
> >>>>     - [ also: optionally decide what to do: failing thread creation?
> >>>> retry with a default stack size? ]
> >>>>     - return false
> >>>>
> >>>> pthread_attr_setguardsize()
> >>>> if failed
> >>>>     - log out "pthread_attr_setguardsize failed" and errno
> >>>>     - decide what to do - ignore? assert? fail thread creation? Should
> >>>> we even care?
> >>>>     - return false
> >>>>
> >>>> and then call pthread_create with the existing error handling as follow
> up.
> >>>>
> >>>> What do you think?`
> >>>>
> >>>> (Also, if pthread_attr_setstacksize() fails, should the thread not be
> >>>> created with the pthread default stack size, which should be ~2MB?
> Why
> >>>> is that stack tiny?)
> >>>>
> >>>> Best Regards, Thomas
> >>>>
> >>>>
> >>>> On Sun, Jun 10, 2018 at 5:33 PM, Lindenmaier, Goetz
> >>>> <goetz.lindenmaier at sap.com> wrote:
> >>>>> Hi,
> >>>>>
> >>>>> This fixes a crash in thread creation with too big stack sizes
> >>>>> http://cr.openjdk.java.net/~goetz/wr18/8204652-
> >> aixHugeStacksCrash/01/
> >>>>> Please review.
> >>>>>
> >>>>> For Java and Compiler threads the return code of
> >>>> pthread_attr_setstacksize
> >>>>>   is overwritten. If pthread_attr_setstacksize does not succeed, a tiny
> >>>>>   stack size with not enough space for the yellow/red pages is
> allocated.
> >>>>>   VM crashes with SIGSEGV right away.
> >>>>>
> >>>>> Best regards,
> >>>>>    Goetz


More information about the hotspot-runtime-dev mailing list