Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Using AJP when downloading of large streaming data results in the errors "OutOfMemoryError: Java heap space" and "503 Service Temporarily Unavailable" #350

Closed
pdurbin opened this issue Jun 22, 2015 · 32 comments

Comments

@pdurbin
Copy link

pdurbin commented Jun 22, 2015

Summary

I'm using Payara 4.1.152.1 behind Apache 2.2 (specifically, the version that ships with CentOS 6: httpd-2.2.15-39.el6.centos.x86_64) and I'm getting java.lang.OutOfMemoryError: Java heap space and "503 Service Temporarily Unavailable" when I try to use AJP (mod_proxy_ajp) when downloading a gigabyte from a simple app that allows an arbitrary number of bytes to be streamed. I don't see the problem when I don't use AJP.

How to reproduce

Expected behavior: The file is downloaded without incident

Actual behavior: Payara logs java.lang.OutOfMemoryError: Java heap space and the client reports "503 Service Temporarily Unavailable".

Without AJP everything works

Below is the output of curl when AJP is not used. Everything works fine. No 503 errors. The Apache config looks like this:

<VirtualHost *:80>
ServerName example.com
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>

The most important output below is the line indicating 200 OK. The one gigabyte file was downloaded without indicent:

murphy:apachetest pdurbin$ curl -v http://pdurbin.iq.harvard.edu/apachetest-0.1/api/download/streamBytes/1000000000 > /dev/null
* Hostname was NOT found in DNS cache
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 140.247.115.167...
* Connected to pdurbin.iq.harvard.edu (140.247.115.167) port 80 (#0)
> GET /apachetest-0.1/api/download/streamBytes/1000000000 HTTP/1.1
> User-Agent: curl/7.37.1
> Host: pdurbin.iq.harvard.edu
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Mon, 22 Jun 2015 18:51:39 GMT
* Server Payara Server Open Source Edition  4.1.152.1 #badassfish is not blacklisted
< Server: Payara Server Open Source Edition  4.1.152.1 #badassfish
< X-Powered-By: Servlet/3.1 JSP/2.3 (Payara Server Open Source Edition  4.1.152.1 #badassfish Java/Oracle Corporation/1.7)
< Content-Type: application/octet-stream
< Connection: close
< Transfer-Encoding: chunked
< 
{ [data not shown]
100  953M    0  953M    0     0  8266k      0 --:--:--  0:01:58 --:--:-- 8401k
* Closing connection 0
murphy:apachetest pdurbin$ 

Using AJP results in OutOfMemoryError and 503 errors

In order to use AJP we first enable 8009 as the listener port: asadmin create-network-listener --protocol http-listener-1 --listenerport 8009 --jkenabled true jk-connector

Then we modify the Apache config to use mod_proxy_ajp rather than mod_proxy_http:

<VirtualHost *:80>
ServerName example.com
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
</VirtualHost>

Then we repeat the curl command that worked fine when we were not using AJP. Notice that we see "503 Service Temporarily Unavailable":

murphy:apachetest pdurbin$ curl -v http://pdurbin.iq.harvard.edu/apachetest-0.1/api/download/streamBytes/1000000000 > /dev/null
* Hostname was NOT found in DNS cache
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 140.247.115.167...
* Connected to pdurbin.iq.harvard.edu (140.247.115.167) port 80 (#0)
> GET /apachetest-0.1/api/download/streamBytes/1000000000 HTTP/1.1
> User-Agent: curl/7.37.1
> Host: pdurbin.iq.harvard.edu
> Accept: */*
> 
  0     0    0     0    0     0      0      0 --:--:--  0:01:00 --:--:--     0< HTTP/1.1 503 Service Temporarily Unavailable
< Date: Mon, 22 Jun 2015 18:34:43 GMT
< Content-Length: 411
< Connection: close
< Content-Type: text/html; charset=iso-8859-1
< 
{ [data not shown]
100   411  100   411    0     0      6      0  0:01:08  0:01:00  0:00:08   101
* Closing connection 0
murphy:apachetest pdurbin$ 

Here is the OutOfMemoryError error we see in /home/payara/payara41/glassfish/domains/domain1/logs/server.log

[2015-06-22T14:35:40.097-0400] [Payara 4.1] [SEVERE] [AS-WEB-CORE-00037] [javax.enterprise.web.core] [tid: _ThreadID=119 _ThreadName=jk-connector(1)] [timeMillis: 1434998140097] [levelValue: 1000] [[
  An exception or error occurred in the container during the request processing
java.lang.OutOfMemoryError: Java heap space
        at java.util.Arrays.copyOf(Arrays.java:2367)
        at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:130)
        at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:114)
        at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:415)
        at java.lang.StringBuilder.append(StringBuilder.java:132)
        at com.sun.enterprise.server.logging.UniformLogFormatter.uniformLogFormat(UniformLogFormatter.java:457)
        at com.sun.enterprise.server.logging.UniformLogFormatter.format(UniformLogFormatter.java:178)
        at java.util.logging.StreamHandler.publish(StreamHandler.java:196)
        at java.util.logging.ConsoleHandler.publish(ConsoleHandler.java:105)
        at java.util.logging.Logger.log(Logger.java:616)
        at java.util.logging.Logger.doLog(Logger.java:641)
        at java.util.logging.Logger.logp(Logger.java:757)
        at com.sun.enterprise.web.logger.IASLogger.write(IASLogger.java:127)
        at com.sun.enterprise.web.logger.LoggerBase.write(LoggerBase.java:230)
        at com.sun.enterprise.web.logger.LoggerBase.log(LoggerBase.java:204)
        at com.sun.enterprise.web.logger.IASLogger.log(IASLogger.java:57)
        at org.apache.catalina.core.StandardWrapperValve.log(StandardWrapperValve.java:465)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:357)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282)
        at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
        at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
        at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
        at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
        at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
]]

[2015-06-22T14:35:52.037-0400] [Payara 4.1] [WARNING] [] [org.glassfish.grizzly.filterchain.DefaultFilterChain] [tid: _ThreadID=119 _ThreadName=jk-connector(1)] [timeMillis: 1434998152037] [levelValue: 900] [[
  GRIZZLY0013: Exception during FilterChain execution
java.lang.OutOfMemoryError: Java heap space
        at java.util.Arrays.copyOf(Arrays.java:2219)
        at org.glassfish.grizzly.memory.BuffersBuffer.ensureBuffersCapacity(BuffersBuffer.java:316)
        at org.glassfish.grizzly.memory.BuffersBuffer.append(BuffersBuffer.java:240)
        at org.glassfish.grizzly.memory.BuffersBuffer.split(BuffersBuffer.java:478)
        at org.glassfish.grizzly.http.ajp.AjpMessageUtils.appendContentAndTrim(AjpMessageUtils.java:486)
        at org.glassfish.grizzly.http.ajp.AjpHandlerFilter.encodeHttpPacket(AjpHandlerFilter.java:275)
        at org.glassfish.grizzly.http.ajp.AjpHandlerFilter.handleWrite(AjpHandlerFilter.java:244)
        at org.glassfish.grizzly.filterchain.ExecutorResolver$8.execute(ExecutorResolver.java:111)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
        at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
        at org.glassfish.grizzly.filterchain.FilterChainContext.write(FilterChainContext.java:890)
        at org.glassfish.grizzly.filterchain.FilterChainContext.write(FilterChainContext.java:858)
        at org.glassfish.grizzly.http.io.OutputBuffer.flushBuffer(OutputBuffer.java:1029)
        at org.glassfish.grizzly.http.io.OutputBuffer.flushBinaryBuffers(OutputBuffer.java:1016)
        at org.glassfish.grizzly.http.io.OutputBuffer.flushAllBuffers(OutputBuffer.java:987)
        at org.glassfish.grizzly.http.io.OutputBuffer.close(OutputBuffer.java:716)
        at org.glassfish.grizzly.http.io.OutputBuffer.endRequest(OutputBuffer.java:379)
        at org.glassfish.grizzly.http.server.Response.finish(Response.java:516)
        at org.glassfish.grizzly.http.server.HttpServerFilter.afterService(HttpServerFilter.java:384)
        at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:260)
        at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
        at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
        at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
        at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
        at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
]]
  • Update 1: linked to war file for easy download
@phillipross
Copy link
Contributor

Try bumping up the heap size via jvm parameters in your domain or test with the payaradomain which has higher memory heapsize settings than the default. It would be helpful to know if this is reproducible when the memory settings are configured more generously than the fairly constrained defaults (512M) that ship with glassfish. Ideally, the JVM should not run out of memory.

If you haven't already changed the default settings in the default domain, you can use these asadmin commands:

asadmin delete-jvm-options -Xmx512m
asadmin create-jvm-options -Xmx1g
asadmin restart-domain domain1

@smillidge
Copy link
Contributor

Can you get a heap dump using -XX:+HeapDumpOnOutOfMemoryError http://www.oracle.com/technetwork/java/javase/clopts-139448.html#gbzrr then run through Eclipse Memory Analyzer to see what is holding the reference to all the memory.

@smillidge smillidge added upstream bug PR: TESTS REQUIRED PR Requires Tests to be merged labels Jun 24, 2015
@pdurbin
Copy link
Author

pdurbin commented Jun 25, 2015

@smillidge thanks for your comment! I'm new to getting heap dumps and Eclipse Memory Analyzer but I stopped domain1, added <jvm-options>-XX:+HeapDumpOnOutOfMemoryError</jvm-options> under <config name="server-config">, and started domain1 again.

I reproduced the OutOfMemoryError with this...

curl -v http://pdurbin.iq.harvard.edu/apachetest-0.1/api/download/streamBytes/1000000000

... and posted the heap dump here:

http://dvn-vm1.hmdc.harvard.edu/tmp/payara/issues/350/java_pid23376.hprof

This is with the following Apache config:

<VirtualHost *:80>
ServerName pdurbin.iq.harvard.edu
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
</VirtualHost>

This is the war file I'm using: https://github.com/IQSS/apachetest/releases/download/v0.1/apachetest-0.1.war

I used the Eclipse Memory Analyzer wizard to create this screenshot of "Problem Suspect 1" for leaks, if it's helpful:

screen shot 2015-06-25 at 9 27 23 am

At the top it says this:

One instance of "org.glassfish.grizzly.http.server.io.ServerOutputBuffer" loaded by "org.apache.felix.framework.BundleWiringImpl$BundleClassLoaderJava5 @ 0xe18df860" occupies 377,550,848 (90.92%) bytes. The memory is accumulated in one instance of "org.glassfish.grizzly.Buffer[]" loaded by "org.apache.felix.framework.BundleWiringImpl$BundleClassLoaderJava5 @ 0xe18df860".

The "Shortest Paths To the Accumulation Point" looks like this:

  • org.glassfish.grizzly.Buffer[61445] @ 0xf5b6ef20
    • buffers org.glassfish.grizzly.memory.BuffersBuffer @ 0xe44c6420
      • compositeBuffer org.glassfish.grizzly.http.server.io.ServerOutputBuffer @ 0xe44c63b8
        • <Java Local> org.glassfish.grizzly.threadpool.DefaultWorkerThread @ 0xe2215b00 jk-connector(1) Thread

I hope this helps! Please let me know if there is any more information I can provide.

@smillidge
Copy link
Contributor

Thanks that's a lot to go on. It looks like the ajp buffer is not being flushed.

pdurbin referenced this issue in IQSS/apachetest Jun 26, 2015
…cified number bytes through a servlet output stream.
@pdurbin
Copy link
Author

pdurbin commented Jun 26, 2015

@smillidge sure thing. Not to distract you but @phillipross and I ran a different experiment with just a servlet you might want to check out, including another heap dump: IQSS/apachetest@488fe9e

I'm not sure what it shows exactly but perhaps @phillipross can better explain.

@smillidge I'm not sure how you've concluded that the ajp buffer isn't being flushed but I trust you. :) Are you saying this is something that could be fixed?

@phillipross
Copy link
Contributor

The servlet test just shows that jersey handling of streaming is not necessarily the issue that triggers the problem. It occurs even when a simple servlet writing lots of data (with regular explicit flushes) to the servlet output stream.

@pdurbin
Copy link
Author

pdurbin commented Jun 26, 2015

I wonder if GrizzlyNIO/grizzly-mirror@5a66d86 is related. I found it via https://java.net/jira/browse/GRIZZLY-1709 via https://java.net/jira/browse/GLASSFISH-21202

Perhaps https://java.net/jira/browse/GRIZZLY-1709 is unrelated. Payara 4.1.152.1 (the version I've been testing with) already includes Grizzly 2.3.19 and the fix version was 2.3.17. Sorry to clutter this issue with a false alarm.

( http://download.oracle.com/glassfish/4.1/nightly/glassfish-4.1-b14-06_22_2015.zip also includes Grizzly 2.3.19 . I just repeated the test with that "nightly" and got the same OutOfMemoryError.)

So maybe this is a different bug in Grizzly that may not even have a bug number yet?

@landreev
Copy link

Hi, I work with @pdurbin on the Dataverse project.
Thanks so much for looking into this!

I just want to add one (potentially) important bit of information:
This issue is only appearing when streaming content that's generated dynamically; i.e. when we can't provide a content-length header upfront. If you modify the test code @pdurbin posted and add "Content-Length: " to the response, it'll make it work and flush as it should. Both with direct http calls to the API and via AJP.

When there is no content-length header - on direct http connections, Grizzly switches into transfer-encoding=chunked, and starts delivering content, flushing after every write.
With AJP - you get nothing sent over, a growing buffer and eventually run out of heap, as described above.

@smillidge
Copy link
Contributor

Thanks sounds like key information for narrowing this down. I'll get a test case together and raise on the Grizzly JIRA while we work on this issue.

@smillidge
Copy link
Contributor

@smillidge
Copy link
Contributor

Can you test the patch attached to https://java.net/jira/browse/GRIZZLY-1787 if it works we'll add to our patched projects repo.

@pdurbin
Copy link
Author

pdurbin commented Jun 30, 2015

@smillidge thank you so much for creating that issue and thank you @rlubke for creating the patch!

I've been googling but I'm not quite sure how to apply the patch. Is it simply a matter of copying the updated "grizzly-http-ajp-2.3.19.jar" file into payara41/glassfish/modules?

@rlubke
Copy link

rlubke commented Jun 30, 2015

You'll want to make a backup of glassfish-grizzly-extra-all.jar and then replace the org.glassfish.grizzly.http.ajp.AjpHttpRequest class from the extra-all.jar with the same class from the patch jar.

@smillidge
Copy link
Contributor

Yep @rlubke is correct, that's the only way at the moment until we load the patched jar into https://github.com/payara/Payara_PatchedProjects/tree/master/org/glassfish/grizzly/grizzly-http-ajp with a specific patched rev number and mess with the build dependencies to pick it up. Which we can do if it fixes your issue.

@rlubke do you know which Grizzly release this will make it into?

@rlubke
Copy link

rlubke commented Jun 30, 2015

The next release version is 2.3.22. I'll have to check with the team regarding a release timeline.

@smillidge
Copy link
Contributor

Oops just saw the JIRA update 2.3.22 awesome. That might be out before our end of July release in which case we'll pick that up otherwise we'll do a patched Grizzly until then.

@pdurbin
Copy link
Author

pdurbin commented Jun 30, 2015

The patch at https://java.net/jira/secure/attachment/55000/grizzly-http-ajp-2.3.19.jar from https://java.net/jira/browse/GRIZZLY-1787 works!

Here's how I patched the jar (with double checks of the new size of AjpHttpRequest.class):

[payara@dvn-vm1 patch]$ jar tfv glassfish-grizzly-extra-all.jar | grep AjpHttpRequest
  7094 Fri Feb 27 12:07:02 EST 2015 org/glassfish/grizzly/http/ajp/AjpHttpRequest.class
[payara@dvn-vm1 patch]$ jar uf glassfish-grizzly-extra-all.jar org/glassfish/grizzly/http/ajp/AjpHttpRequest.class 
[payara@dvn-vm1 patch]$ jar tfv glassfish-grizzly-extra-all.jar | grep AjpHttpRequest
  7223 Tue Jun 30 12:05:34 EDT 2015 org/glassfish/grizzly/http/ajp/AjpHttpRequest.class
[payara@dvn-vm1 patch]$ 

Before putting the patched jar in place I repeated the curl test to make sure I still got OutOfMemoryError, which I did: curl -v http://pdurbin.iq.harvard.edu/apachetest-0.2/api/download/streamBytes/1000000000

Then I stopped Payara, put the patched glassfish-grizzly-extra-all.jar in place, and started Payara again.

Then I repeated the test. There was no OutOfMemoryError in /home/payara/payara41/glassfish/domains/domain1/logs/server.log and curl reported "200 OK" after the download was complete! Thanks @rlubke!!

Speaking of release timelines, does anyone know when a version of Grizzly that contains this patch would appear in Glassfish? I'll certainly report this recent activity on the thread I started (but I'll probably wait until there is a commit I can link to): https://java.net/projects/glassfish/lists/users/archive/2015-06/message/13

@smillidge
Copy link
Contributor

Thanks we'll look to incorporate the patch into the build asap. Can't speak for GlassFish but I can imagine it will be when they up-rev Grizzly in their nightly build to 2.3.22. Nightly GlassFish currently has 2.3.21

@smillidge smillidge added reproducible and removed PR: TESTS REQUIRED PR Requires Tests to be merged labels Jun 30, 2015
@smillidge smillidge added this to the Payara Server 4.1.153 milestone Jun 30, 2015
@rlubke
Copy link

rlubke commented Jun 30, 2015

Glad to hear it works. I'll follow up here once I have an idea on the release timeline.

@pdurbin
Copy link
Author

pdurbin commented Jun 30, 2015

@rlubke thanks! And I see you already committed the fix at https://java.net/projects/grizzly/sources/git/diff/modules/http-ajp/src/main/java/org/glassfish/grizzly/http/ajp/AjpHttpRequest.java?rev1=e9ea48db1b28405885d666475ba0d0c2f1abdcc4&rev2=102c432aa2004c581db1c297e94b0eb90dd74122

     private AjpHttpRequest init() {
         cachedResponse.setRequest(this);
+        cachedResponse.setChunkingAllowed(true);
         setResponse(cachedResponse);
         return this;
     }

Awesome.

@rlubke Do you have any suggestions on how to patch Glassfish 4.1? Glassfish 4.1 seems to have Grizzly 2.3.15-1, which is much older than the 2.3.19 version we've been testing with here. I'd be nervous about taking a class file from 2.3.19 and sticking it in jar file for 2.3.15-1.

@smillidge
Copy link
Contributor

Looking @ blame https://github.com/GrizzlyNIO/grizzly-mirror/blame/2.3.x/modules/http-ajp/src/main/java/org/glassfish/grizzly/http/ajp/AjpHttpRequest.java

Nothing has changed between 2.3.15-1 (July 2014) and 2.3.19 so I imagine it is pretty safe to do.

@rlubke
Copy link

rlubke commented Jun 30, 2015

@pdurbin Yep, @smillidge beat me to it. Very little change in this area.

@pdurbin
Copy link
Author

pdurbin commented Jun 30, 2015

To be clear, are we saying it safe to drop the updated "AjpHttpRequest.class" file from https://java.net/jira/secure/attachment/55000/grizzly-http-ajp-2.3.19.jar into the "glassfish-grizzly-extra-all.jar" file that's in Glassfish 4.1 (which was built from 2.3.15-1)?

@rlubke
Copy link

rlubke commented Jun 30, 2015

@pdurbin Correct.

@pdurbin
Copy link
Author

pdurbin commented Jun 30, 2015

Yep, the patched "AjpHttpRequest.class" seems to work fine even in Glassfish 4.1: IQSS/dataverse#2180 (comment) . Thanks!

smillidge pushed a commit to smillidge/Payara that referenced this issue Aug 15, 2015
smillidge added a commit that referenced this issue Aug 19, 2015
PAYARA-322 fixes #350 upgrades Grizzly to 2.3.22
@rlubke
Copy link

rlubke commented Aug 27, 2015

Just a quick follow up. Grizzly 2.3.22, which includes the fix for this issue, was recently released.

@smillidge
Copy link
Contributor

Thanks @rlubke. I had some problems incorporating Grizzly 2.3.22 as I had to disable the Http2 addon to get it to work. I also had to add the dependencies grizzly-http2 and grizzly-npn-api. Would be useful to know how to enable Http2 correctly with the latest Grizzly on GlassFish.

@rlubke
Copy link

rlubke commented Aug 28, 2015

We haven't done the integration work for HTTP/2+Glassfish yet. Would you mind opening an issue to track that work?

@smillidge
Copy link
Contributor

On Grizzly JIRA?

@rlubke
Copy link

rlubke commented Aug 28, 2015

Yeah, that'd be fine.

@smillidge
Copy link
Contributor

https://java.net/jira/browse/GRIZZLY-1803 raised on Grizzly for HTTP2 support in GlassFish

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants