[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