2

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));
4

0 に答える 0