On 26/06/2020 12:45, Chirag Dewan wrote:
> Absolutely Mark. Shouldn't take long.

Great. I think I have found a potential root cause. If I am right, NIO
will show the same issues NIO2 did.

I should have a test build for you shortly.

Mark


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


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to