[httpclient] HTTP2: Memory Leak with Proxy

Chris Hegarty chris.hegarty at oracle.com
Tue Aug 7 10:05:16 UTC 2018


Hi Albert,

Very strange indeed. Thanks for reporting it, I’ll investigate.

What do your mean by “bad proxy”. What is bad about it, and how does it behave?

-Chris.


> On 7 Aug 2018, at 10:25, Albert Schimpf <albi646 at gmx.de> wrote:
> 
> Hi,
> 
> I stumbled upon some strange behavior when using the new Java httpclient.
> 
> The issue is very simple to reproduce. Send a GET request via a known bad proxy:
> 
> HttpClient client = HttpClient.newBuilder()
>                     .proxy(ProxySelector.of(BAD_PROXY))
>                     .build();
> 
> HttpRequest req = HttpRequest
>                     // target is not relevant
>                     .newBuilder(...)
>                     .GET()
>                     .build();
> 
> // body handler is not relevant
> HttpResponse.BodyHandler<?> t = HttpResponse.BodyHandler.asString();
> 
> // happens with both async and sync send
> client.sendAsync(req, t).get(30, TimeUnit.SECONDS);
> 
> The result is that the heap size increases dramatically (to about 1.5GB) and resources are not released. CPU consumption increases by a constant factor, too. I have tried many variations of the above code, and the only thing which seems to work (i.e. heap size does not explode) is to set the HTTP version to 1.1.
> 
> In my main application this leads to both memory and CPU starvation (4GB memory limit, 100% CPU usage). It usually uses only 5% CPU and 200MB memory at worst.
> 
> I have attached a working example code with a bad proxy. I uploaded the generated garbage collection log and three heap dumps (before, during, and after the request) to dropbox:
> 
> https://www.dropbox.com/s/ulqnmrmgr58rrul/debug.zip
> 
> I tried the 10.0.0-openjdk and 10.0.1-zulu version. I can reproduce the issue 100% of times.
> 
> Am I doing something wrong? Is this to be expected if one somehow happens to use a bad proxy? If this is to be expected, how can I protect my application against such behavior?
> 
> 
> Best,
> Albert
> <mon.png><Main.java>



More information about the net-dev mailing list