jgroups を使用して、クラスターを介していくつかの Java オブジェクトを同期しています。現在、サーバーは 2 つしかなく、TCP プロトコルを使用しています。同期用に 1 つの TCP ポート (42812) を構成しました。
次の問題が発見されました。サーバーが 1 時間から 3 時間実行されていると、メモリ使用量が大幅に増加します。そのため、ヒープ ダンプを取得したところ、両方のサーバーで次のリークの疑いがあることがわかりました。
The thread java.lang.Thread @ 0x5ff35fdd8 Connection.Receiver [11.63.99.51:42813
- 11.63.99.51:42813],userNotificationCounterSync,hjad-gts4-de16-38376 keeps local
variables with total size 1.650.814.560 (38,04%) bytes.
The memory is accumulated in one instance of "byte[]" loaded by "".
The stacktrace of this Thread is available. See stacktrace.
tcp ダンプを作成したとき、syn ack パッケージが 42813 ポート経由で送信されたことが確認されただけでしたが、これはメモリが増加した後でした。そのため、サーバーは構成されていないポートを介してメッセージを受信しており、それらを処理していないように見えます。メモリ使用量が 1.650.814.560 バイトを超えることはなく、同期されたコンテナーは同期されているため、同期に問題はありません。port_range を 0 にして、Spring xml 構成で JChannel を構成します。
TCP(bind_port=12812;
port_range=0;
recv_buf_size=130k;
send_buf_size=130k;
tcp_nodelay=true;
enable_bundling=false;)
:TCPPING(initial_hosts=server1[42812],server2[42812])
:MERGE2:FD_SOCK:VERIFY_SUSPECT:pbcast.NAKACK(use_mcast_xmit=false;retransmit_timeout=300,600,1200,2400,4800;discard_delivered_msgs=true;)
:UNICAST:pbcast.STABLE(stability_delay=1000;desired_avg_gossip=50000;max_bytes=400000;)
:FRAG:pbcast.GMS(print_local_addr=true;join_timeout=3000;view_bundling=true;):pbcast.STATE
この構成での私たちの意見では、ノードはポート 42813 経由で通信するべきではありません。
Connection.Receiver がこのポートを介して非常に多くのデータを受信している可能性はありますか? また、なぜ処理されないのですか?