TLS で暗号化されたキープアライブ ソケット接続を提供する netty アプリケーションがあります。ソケット接続数が 100000 以上になると、使用される jvm メモリが 2.5G を超えます。
mat のメモリ レポートによると、ほとんどのメモリは EngineOutputRecord によって使用されています (写真のように)。私の知る限り、これは TLS ハンドシェイクの情報であり、ハンドシェイク後は役に立ちません。バイトをクリアしたいのですが、方法が見つかりません。何か提案はありますか?
私のコード:
私のパイプライン:
@Override
public ChannelPipeline getPipeline() throws Exception {
ChannelPipeline pipeline = Channels.pipeline();
SSLEngine engine = SecurePushSslContextFactory.getServerContext()
.createSSLEngine();
engine.setUseClientMode(false);
SslHandler sslHandler = new SslHandler(engine);
pipeline.addLast("ssl", sslHandler);
pipeline.addLast("framer", frame);
pipeline.addLast("decoder", myDecoder);
pipeline.addLast("handler", myHandler);
return pipeline;
}
Netty を開始します。
ChannelFactory channelFactory = new NioServerSocketChannelFactory(
Executors.newFixedThreadPool(1), // BOSS EXECUTOR
Executors.newCachedThreadPool() // WORKER EXECUTOR
);
ServerBootstrap bootstrap = new ServerBootstrap(channelFactory);
bootstrap.setPipelineFactory(new SecurePushServerPipelineFactory());
bootstrap.bind(new InetSocketAddress(port));