You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Andriy Redko (Jira)" <ji...@apache.org> on 2025/04/13 03:10:00 UTC
[jira] [Assigned] (CXF-9100) HttpClient-1-Worker-* thread leak when throwing exception in LoggingOutInterceptor and sending large SOAP message
[ https://issues.apache.org/jira/browse/CXF-9100?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andriy Redko reassigned CXF-9100:
---------------------------------
Assignee: Andriy Redko
> HttpClient-1-Worker-* thread leak when throwing exception in LoggingOutInterceptor and sending large SOAP message
> -----------------------------------------------------------------------------------------------------------------
>
> Key: CXF-9100
> URL: https://issues.apache.org/jira/browse/CXF-9100
> Project: CXF
> Issue Type: Bug
> Components: logging, Transports
> Affects Versions: 4.0.4, 4.1.0, 3.6.5
> Reporter: Andrey
> Assignee: Andriy Redko
> Priority: Major
> Attachments: image-2025-01-13-12-39-07-688.png, image-2025-01-13-12-40-36-534.png
>
>
> Hello,
> After upgrading from 3.5.3 to 3.6+ (tried 3.6.5, 4.0.4, 4.1.0) we have noticed a HttpClient-1-Worker-* thread leak. Screenshots from VisualVM in attachments.
> How to reproduce:
> # register custom LogEventSender and LoggingOutInterceptor
> # throw any exception in send() method
> # send SOAP message with body >4kb (default chunkingThreshold value for HTTPConduit)
> # repeat previous step N times
> # watch HttpClient-1-Worker-* threads count grow till RejectedExecutionException for JDK17 or OutOfMemoryError for JDK21 after 3984 (in my case) threads
> Possible workaround:
> Configure chunkingThreshold with greater value
> Example for Spring:
> {code:java}
> @Bean
> fun httpConduitConfigurer(): HTTPConduitConfigurer {
> return HTTPConduitConfigurer { _, _, conduit ->
> val httpClientPolicy = HTTPClientPolicy()
> httpClientPolicy.chunkingThreshold = 16384
> conduit.setClient(httpClientPolicy)
> }
> } {code}
>
> I wrote a demo project for this case: https://github.com/AndChelp/cxf-thread-leak
> You can run TestControllerTest#testCommonEndpoint and watch «HttpClient-1-* thread count: N» log. Or you can run it as Spring Application, send GET /common request and watch threads with any profiler.
> The project also has a configured workaround on /workaround endpoint and test for it
--
This message was sent by Atlassian Jira
(v8.20.10#820010)