一旦 glassfish 服务器 5.0 启动并运行了 2.3 小时(部署了我的应用程序),就会出现堆内存错误。堆内存转储显示 sun.security.ssl.sslengineimpl 包括“java.static.org.glassfish.grizzly.npn.NegotiationSupport.alpnserverNegotiator”消耗 78% 的内存。为什么是这样?
1 回答
我刚刚发现 glassfish 在使用 HTTP/2(默认)导致内存泄漏时存在内存泄漏。我真正做的是在每个侦听器中禁用 http2。
asadmin >set configs.config.server-config.network-config.protocols.protocol.http-listener-1.http.http2-enabled=false
asadmin >set configs.config.server-config.network-config.protocols.protocol .http-listener-2.http.http2-enabled=false
asadmin >set configs.config.server-config.network-config.protocols.protocol.admin-listener.http.http2-enabled=false
并在 glassfish 中更改 Grizzly 的DEFAULT_MEMORY_MANAGER。
-Dorg.glassfish.grizzly.DEFAULT_MEMORY_MANAGER=org.glassfish.grizzly.memory.HeapMemoryManager