2014-01-14 60 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,並且一切按預期工作。