Absolutely Mark. Shouldn't take long.

On Fri, 26 Jun, 2020, 4:16 pm Mark Thomas, <ma...@apache.org> wrote:

> Aha!
>
> h2c could be the significant factor here. Let me take a look.
>
> Are you in a position to test against a dev build if the need arises?
>
> Mark
>
>
> On 26/06/2020 11:30, Chirag Dewan wrote:
> > Hey Mark,
> >
> > *Are you using h2c or h2 in your test?*
> > We are using h2c
> >
> >
> > *Do you see the same issue if you switch the the NIO connector? Note
> > performance differences between NIO and NIO2 are very small.*
> >
> > I havent tried with NIO honestly. Can quickly execute and check. Will
> > update the results.
> >
> > *How long does a single request take to process?*
> > In normal scenarios, less than 3ms.
> >
> > Thanks,
> > Chirag
> >
> > On Fri, Jun 26, 2020 at 3:26 PM Mark Thomas <ma...@apache.org> wrote:
> >
> >> Hi,
> >>
> >> Thanks for the additional information. The GC roots were particularly
> >> informative.
> >>
> >> Those RequestInfo objects are associated with HTTP/1.1 requests, not
> >> HTTP/2 requests.
> >>
> >> Some further questions to try and track down what is going on:
> >>
> >> - Are you using h2c or h2 in your test?
> >>
> >> - Do you see the same issue if you switch the the NIO connector? Note
> >>   performance differences between NIO and NIO2 are very small.
> >>
> >> - How long does a single request take to process?
> >>
> >> Thanks,
> >>
> >> Mark
> >>
> >> On 26/06/2020 09:24, Chirag Dewan wrote:
> >>> Thanks Mark.
> >>>
> >>> *What is the typical response size for one of these requests? *
> >>> It' basically a dummy response JSON of ~300bytes. I expect 2300bytes of
> >>> response in my production use case, but the purpose here was to isolate
> >> as
> >>> many things as possible. Hence a dummy response.
> >>>
> >>> *How long does a typical test take to process? *
> >>> I see Tomcat's memory reaching 28G in about 2hours at 19K TPS. The
> number
> >>> of streams on my client was 500 - which means about 40 connections per
> >>> second.
> >>>
> >>> * What are the GC roots for those RequestInfo objects?*
> >>> https://ibb.co/fMRmCXZ
> >>>
> >>> I hope I was able to answer everything as expected. Thanks.
> >>>
> >>> On Thu, Jun 25, 2020 at 8:30 PM Mark Thomas <ma...@apache.org> wrote:
> >>>
> >>>> Thanks.
> >>>>
> >>>> I've looked at the code and I have tried various tests but I am unable
> >>>> to re-create a memory leak.
> >>>>
> >>>> The code used to (before I made a few changes this afternoon) retain a
> >>>> lot more memory per Stream and it is possible that what you are seeing
> >>>> is a system that doesn't have enough memory to achieve steady state.
> >>>>
> >>>> If you are able to build the latest 9.0.x and test that, that could be
> >>>> helpful. Alternatively, I could provide a test build for you to
> >>>> experiment with.
> >>>>
> >>>> Some additional questions that might aid understanding:
> >>>>
> >>>> - What is the typical response size for one of these requests?
> >>>> - How long does a typical test take to process?
> >>>> - What are the GC roots for those RequestInfo objects?
> >>>>
> >>>> Thanks again,
> >>>>
> >>>> Mark
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> On 25/06/2020 15:10, Chirag Dewan wrote:
> >>>>> Hi Mark,
> >>>>>
> >>>>> Its the default APR connector with 150 Threads.
> >>>>>
> >>>>> Chirag
> >>>>>
> >>>>> On Thu, 25 Jun, 2020, 7:30 pm Mark Thomas, <ma...@apache.org> wrote:
> >>>>>
> >>>>>> On 25/06/2020 11:00, Chirag Dewan wrote:
> >>>>>>> Thanks for the quick check Mark.
> >>>>>>>
> >>>>>>> These are the images I tried referring to:
> >>>>>>>
> >>>>>>> https://ibb.co/LzKtRgh
> >>>>>>>
> >>>>>>> https://ibb.co/2s7hqRL
> >>>>>>>
> >>>>>>> https://ibb.co/KmKj590
> >>>>>>>
> >>>>>>>
> >>>>>>> The last one is the MAT screenshot showing many RequestInfo
> objects.
> >>>>>>
> >>>>>> Thanks. That certainly looks like a memory leak. I'll take a closer
> >>>>>> look. Out of interest, how many threads is the Connector configured
> to
> >>>> use?
> >>>>>>
> >>>>>> Mark
> >>>>>>
> >>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> Thanks,
> >>>>>>>
> >>>>>>> Chirag
> >>>>>>>
> >>>>>>> On Wed, Jun 24, 2020 at 8:30 PM Mark Thomas <ma...@apache.org>
> >> wrote:
> >>>>>>>
> >>>>>>>> On 24/06/2020 12:17, Mark Thomas wrote:
> >>>>>>>>> On 22/06/2020 11:06, Chirag Dewan wrote:
> >>>>>>>>>> Hi,
> >>>>>>>>>>
> >>>>>>>>>> Update: We found that Tomcat goes OOM when a client closes and
> >> opens
> >>>>>> new
> >>>>>>>>>> connections every second. In the memory dump, we see a lot of
> >>>>>>>>>> RequestInfo objects that are causing the memory spike.
> >>>>>>>>>>
> >>>>>>>>>> After a while, Tomcat goes OOM and start rejecting request(I
> get a
> >>>>>>>>>> request timed out on my client). This seems like a bug to me.
> >>>>>>>>>>
> >>>>>>>>>> For better understanding, let me explain my use case again:
> >>>>>>>>>>
> >>>>>>>>>> I have a jetty client that sends HTTP2 requests to Tomcat. My
> >>>>>>>>>> requirement is to close a connection after a configurable(say
> >> 5000)
> >>>>>>>>>> number of requests/streams and open a new connection that
> >> continues
> >>>> to
> >>>>>>>>>> send requests. I close a connection by sending a GoAway frame.
> >>>>>>>>>>
> >>>>>>>>>> When I execute this use case under load, I see that after
> ~2hours
> >> my
> >>>>>>>>>> requests fail and I get a series of errors like request
> >>>>>>>>>> timeouts(5seconds), invalid window update frame, and connection
> >>>> close
> >>>>>>>>>> exception on my client.
> >>>>>>>>>> On further debugging, I found that it's a Tomcat memory problem
> >> and
> >>>> it
> >>>>>>>>>> goes OOM after sometime under heavy load with multiple
> connections
> >>>>>> being
> >>>>>>>>>> re-established by the clients.
> >>>>>>>>>>
> >>>>>>>>>> image.png
> >>>>>>>>>>
> >>>>>>>>>> image.png
> >>>>>>>>>>
> >>>>>>>>>> Is this a known issue? Or a known behavior with Tomcat?
> >>>>>>>>>
> >>>>>>>>> Embedded images get dropped by the list software. Post those
> images
> >>>>>>>>> somewhere we can see them.
> >>>>>>>>>
> >>>>>>>>>> Please let me know if you any experience with such a situation.
> >>>> Thanks
> >>>>>>>>>> in advance.
> >>>>>>>>>
> >>>>>>>>> Nothing comes to mind.
> >>>>>>>>>
> >>>>>>>>> I'll try some simple tests with HTTP/2.
> >>>>>>>>
> >>>>>>>> I don't see a memory leak (the memory is reclaimed eventually)
> but I
> >>>> do
> >>>>>>>> see possibilities to release memory associated with request
> >> processing
> >>>>>>>> sooner.
> >>>>>>>>
> >>>>>>>> Right now you need to allocate more memory to the Java process to
> >>>> enable
> >>>>>>>> Tomcat to handle the HTTP/2 load it is presented with.
> >>>>>>>>
> >>>>>>>> It looks like a reasonable chunk of memory is released when the
> >>>>>>>> Connection closes that could be released earlier when the
> associated
> >>>>>>>> Stream closes. I'll take a look at what can be done in that area.
> In
> >>>> the
> >>>>>>>> meantime, reducing the number of Streams you allow on a Connection
> >>>>>>>> before it is closed should reduce overall memory usage.
> >>>>>>>>
> >>>>>>>> Mark
> >>>>>>>>
> >>>>>>>>
> >> ---------------------------------------------------------------------
> >>>>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> >>>>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org
> >>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> ---------------------------------------------------------------------
> >>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> >>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org
> >>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> >>>> For additional commands, e-mail: users-h...@tomcat.apache.org
> >>>>
> >>>>
> >>>
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> >> For additional commands, e-mail: users-h...@tomcat.apache.org
> >>
> >>
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
>
>

Reply via email to