tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Wang, Andy" <>
Subject Re: Slow memory leak in mod_jk on Windows
Date Mon, 07 Jul 2014 19:58:11 GMT
On Mon, 2014-07-07 at 15:51 +0000, Wang, Andy wrote:
> We have a customer that's seeing a very slow memory leak under certain
> circumstances that we haven't yet been able to pinpoint.  I can
> reproduce it, but it requires a very particular method of downloading
> files that I don't quite understand yet. (not entirely sure how this
> would impact mod_jk either).  Our customer is still on an older mod_jk
> 1.2.37 but I'm able to see the behavior on 1.2.40.  
> They had Microsoft analyze a memory dump and Microsoft came to the
> analysis that mod_jk was leaking 8k at a time and this is the stack of
> each allocation:
> Function                            Destination
> libapr_1!apr_palloc+212             msvcrt!malloc
> libaprutil_1!apr_brigade_create+11  libapr_1!apr_palloc
> libhttpd!ap_rflush+19               libaprutil_1!apr_brigade_create
> mod_jk+3183a                        libhttpd!ap_rflush
> mod_jk+9729
> mod_jk+f3bd
> kernel32!TlsSetValueStub
> ntdll!_except_handler4
> msvcrt!_except_handler4
> ntdll!_except_handler4
> ntdll!FinalExceptionHandler
> msvcrt!_threadstartex
> I'm far far from a Windows developer :( so I'm slowly getting a system
> configured to do the debugdiag analysis that Microsoft did with the pdb
> files to get the actual symbols.  This will take me some time so I
> thought I'd mail here to see of anyone has seen anything similar or if
> there's any thoughts on what would be slowly leaking the 8k through
> mod_jk.
> If not, I'll try to get the real stack shortly once I get debugdiag
> figured out.
> Thanks,
> Andy

Managed to reproduce this on httpd 2.2.27 and mod_jk 1.2.40

Here's the stack I'm pulling from Microsoft's debugdiag:

Function   Destination 
libapr_1!allocator_alloc+d6   msvcr100!malloc 
libapr_1!apr_palloc+d9   libapr_1!allocator_alloc 
libaprutil_1!apr_brigade_create+11   libapr_1!apr_palloc 
libhttpd!ap_rflush+19   libaprutil_1!apr_brigade_create 
mod_jk!ws_flush+1a   libhttpd!ap_rflush 
mod_jk!ajp_get_reply+c4   mod_jk!ajp_process_callback 
mod_jk!ajp_service+60a   mod_jk!ajp_get_reply 
libhttpd!ap_invoke_handler+a2   libhttpd!ap_run_handler 
libhttpd!ap_process_request+3e   libhttpd!ap_invoke_handler 
libhttpd!ap_process_http_connection+52   libhttpd!ap_process_request 
libhttpd!ap_process_connection+33   libhttpd!ap_run_process_connection 
libhttpd!worker_main+a7   libhttpd!ap_process_connection 
ntdll!_RtlUserThreadStart+1b   ntdll!__RtlUserThreadStart 

I have a relatively large file I'm downloading through a servlet
(unfortunately I didn't write the servlet and am not completely familiar
with what they're doing) and memory slowly slowly grows and isn't
released.  300mb file grows by a few megs each download.

I can't reproduce with the default tomcat file servlet so not sure what
the deal here is.

Going to poke some more but hoping for some ideas.


View raw message