2014-01-14 25 views
0

的问题我们正在使用jgroups通过集群同步多个java对象。目前我们只有两台服务器,我们使用TCP协议。 我们配置了一个单独的tcp端口(42812)进行同步。jgroups Connection.Receiver

我们发现了以下问题:服务器运行一段时间后,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. 

当我们做了,我们只看到了送过来42813端口SYN ACK包一个TCP转储,但这是记忆逐渐升高后, 。 因此,在我们看来,服务器通过未配置的端口接收消息,并且不处理它们。内存使用永远不会超过1.650.814.560字节,并且同步的容器是同步的,所以我们没有同步问题。我们配置JChannel在我们的Spring XML配置为0的port_range:

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.

沟通意见如何IST可能Connection.Receiver通过这个端口接收了太多的数据,为什么不处理?

回答

0

整个问题是我认为是默认设置为0的端口范围。事实证明,这是错误的,我们只是在TCP和TCPPING配置中设置参数port_range = 0,并且一切按预期工作。