±à¼ÍƼö: |
±¾ÎÄÖ÷ÒªÕë¶Ô΢ÐŽ»Á÷ȺÀïÓÐÈËÌá³öµÄ³¤Á¬½Ó£¬ÐÄÌøµÄÎÊÌ⣬×öÒ»¸öͳһµÄÕûÀí£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚKiritoµÄ¼¼Êõ·ÖÏí £¬ÓÉ»ðÁú¹ûÈí¼þLinda±à¼ÍƼö¡£ |
|
¿ÉÄܺܶà Java ³ÌÐòÔ±¶Ô TCP µÄÀí½âÖ»ÓÐÒ»¸öÈý´ÎÎÕÊÖ£¬ËĴλÓÊÖµÄÈÏʶ£¬ÎÒ¾õµÃÕâÑùµÄÔÒòÖ÷ÒªÔÚÓÚ
TCP ÐÒé±¾ÉíÉÔ΢Óеã³éÏó£¨Ïà±È½ÏÓÚÓ¦ÓòãµÄ HTTP ÐÒ飩£»Æä´Î£¬·Ç¿ò¼Ü¿ª·¢Õß²»Ì«ÐèÒª½Ó´¥µ½
TCP µÄһЩϸ½Ú¡£ÆäʵÎÒ¸öÈË¶Ô TCP µÄºÜ¶àϸ½ÚÒ²²¢Ã»ÓÐÍêÈ«Àí½â£¬ÕâÆªÎÄÕÂÖ÷ÒªÕë¶Ô΢ÐŽ»Á÷ȺÀïÓÐÈËÌá³öµÄ³¤Á¬½Ó£¬ÐÄÌøµÄÎÊÌ⣬×öÒ»¸öͳһµÄÕûÀí¡£
ÔÚ Java ÖУ¬Ê¹Óà TCP ͨÐÅ£¬´ó¸ÅÂÊ»áÉæ¼°µ½ Socket¡¢Netty£¬±¾ÎÄ»á½èÓÃËüÃǵÄһЩ
API ºÍÉèÖòÎÊýÀ´¸¨Öú½éÉÜ¡£
³¤Á¬½ÓÓë¶ÌÁ¬½Ó
TCP ±¾Éí²¢Ã»Ó㤶ÌÁ¬½ÓµÄÇø±ð£¬³¤¶ÌÓë·ñ£¬Íêȫȡ¾öÓÚÎÒÃÇÔõôÓÃËü¡£
¶ÌÁ¬½Ó£ºÃ¿´ÎͨÐÅʱ£¬´´½¨ Socket£»Ò»´ÎͨÐŽáÊø£¬µ÷Óà socket.close()¡£Õâ¾ÍÊÇÒ»°ãÒâÒåÉϵĶÌÁ¬½Ó£¬¶ÌÁ¬½ÓµÄºÃ´¦ÊǹÜÀíÆðÀ´±È½Ï¼òµ¥£¬´æÔÚµÄÁ¬½Ó¶¼ÊÇ¿ÉÓõÄÁ¬½Ó£¬²»ÐèÒª¶îÍâµÄ¿ØÖÆÊֶΡ£
³¤Á¬½Ó£ºÃ¿´ÎͨÐÅÍê±Ïºó£¬²»»á¹Ø±ÕÁ¬½Ó£¬ÕâÑù¾Í¿ÉÒÔ×öµ½Á¬½ÓµÄ¸´Óᣳ¤Á¬½ÓµÄºÃ´¦±ãÊÇʡȥÁË´´½¨Á¬½ÓµÄºÄʱ¡£
¶ÌÁ¬½ÓºÍ³¤Á¬½ÓµÄÓÅÊÆ£¬·Ö±ðÊǶԷ½µÄÁÓÊÆ¡£ÏëҪͼ¼òµ¥£¬²»×·Çó¸ßÐÔÄÜ£¬Ê¹ÓöÌÁ¬½ÓºÏÊÊ£¬ÕâÑùÎÒÃǾͲ»ÐèÒª²ÙÐÄÁ¬½Ó״̬µÄ¹ÜÀí£»ÏëҪ׷ÇóÐÔÄÜ£¬Ê¹Óó¤Á¬½Ó£¬ÎÒÃǾÍÐèÒªµ£Ðĸ÷ÖÖÎÊÌ⣺±ÈÈç¶Ë¶Ô¶ËÁ¬½ÓµÄά»¤£¬Á¬½ÓµÄ±£»î¡£
³¤Á¬½Ó»¹³£³£±»ÓÃÀ´×öÊý¾ÝµÄÍÆËÍ£¬ÎÒÃÇ´ó¶àÊýʱºò¶ÔͨÐŵÄÈÏÖª»¹ÊÇ request/response
Ä£ÐÍ£¬µ« TCP Ë«¹¤Í¨ÐŵÄÐÔÖʾö¶¨ÁËËü»¹¿ÉÒÔ±»ÓÃÀ´×öË«ÏòͨÐÅ¡£ÔÚ³¤Á¬½Ó֮ϣ¬¿ÉÒԺܷ½±ãµÄʵÏÖ push
Ä£ÐÍ¡£
¶ÌÁ¬½ÓûÓÐÌ«¶à¶«Î÷¿ÉÒÔ½²£¬ËùÒÔÏÂÎÄÎÒÃǽ«Ä¿¹â¾Û½¹ÔÚ³¤Á¬½ÓµÄһЩÎÊÌâÉÏ¡£´¿½²ÀíÂÛδÃâÓÐЩ¹ýÓÚµ¥µ÷£¬ËùÒÔÏÂÎÄÎÒ½èÖú
Dubbo Õâ¸ö RPC ¿ò¼ÜµÄһЩʵ¼ùÀ´Õ¹¿ª TCP µÄÏà¹ØÌÖÂÛ¡£
·þÎñÖÎÀí¿ò¼ÜÖеij¤Á¬½Ó
Ç°ÃæÒѾÌáµ½¹ý£¬×·ÇóÐÔÄܵÄʱºò£¬±ØÈ»»áÑ¡ÔñʹÓó¤Á¬½Ó£¬ËùÒÔ½èÖú Dubbo ¿ÉÒԺܺõÄÀ´Àí½â TCP¡£ÎÒÃÇ¿ªÆôÁ½¸ö
Dubbo Ó¦Óã¬Ò»¸ö server ¸ºÔð¼àÌý±¾µØ 20880£¨ÖÚËùÖÜÖª£¬ÕâÊÇ Dubbo ÐÒéĬÈϵĶ˿ڣ©£¬Ò»¸ö
client ¸ºÔðÑ»··¢ËÍÇëÇó¡£Ö´ÐÐ lsof-i:20880 ÃüÁî¿ÉÒԲ鿴¶Ë¿ÚµÄÏà¹ØÊ¹ÓÃÇé¿ö£º

*:20880(LISTEN) ˵Ã÷ÁË Dubbo ÕýÔÚ¼àÌý±¾µØµÄ 20880 ¶Ë¿Ú£¬´¦Àí·¢Ë͵½±¾µØ
20880 ¶Ë¿ÚµÄÇëÇó
ºóÁ½ÌõÐÅϢ˵Ã÷ÇëÇóµÄ·¢ËÍÇé¿ö£¬ÑéÖ¤ÁË TCP ÊÇÒ»¸öË«ÏòµÄͨÐŹý³Ì£¬ÓÉÓÚÎÒÊÇÔÚͬһ¸ö»úÆ÷¿ªÆôÁËÁ½¸ö
Dubbo Ó¦Óã¬ËùÒÔÄãÄܹ»¿´µ½ÊDZ¾µØµÄ 53078 ¶Ë¿ÚÓë 20880 ¶Ë¿ÚÔÚͨÐÅ¡£ÎÒÃDz¢Ã»ÓÐÊÖ¶¯ÉèÖÃ
53078 Õâ¸ö¿Í»§¶Ë¶Ë¿Ú£¬ËûÊÇËæ»úµÄ£¬µ«Ò²²ûÊÍÁËÒ»¸öµÀÀí£º¼´Ê¹ÊÇ·¢ËÍÇëÇóµÄÒ»·½£¬Ò²ÐèÒªÕ¼ÓÃÒ»¸ö¶Ë¿Ú¡£
ÉÔ΢˵һÏ FD Õâ¸ö²ÎÊý£¬Ëû´ú±íÁËÎļþ¾ä±ú£¬Ã¿ÐÂÔöÒ»ÌõÁ¬½Ó¶¼»áÕ¼ÓÃеÄÎļþ¾ä±ú£¬Èç¹ûÄãÔÚʹÓà TCP
ͨÐŵĹý³ÌÖгöÏÖÁË open too many files µÄÒì³££¬ÄǾÍÓ¦¸Ã¼ì²éһϣ¬ÄãÊDz»ÊÇ´´½¨ÁËÌ«¶àµÄÁ¬½Ó£¬¶øÃ»Óйرա£Ï¸ÐĵĶÁÕßÒ²»áÁªÏëµ½³¤Á¬½ÓµÄÁíÒ»¸öºÃ´¦£¬ÄǾÍÊÇ»áÕ¼ÓýÏÉÙµÄÎļþ¾ä±ú¡£
³¤Á¬½ÓµÄά»¤
ÒòΪ¿Í»§¶ËÇëÇóµÄ·þÎñ¿ÉÄÜ·Ö²¼ÔÚ¶à¸ö·þÎñÆ÷ÉÏ£¬¿Í»§¶Ë¶Ë×ÔÈ»ÐèÒª¸ú¶Ô¶Ë´´½¨¶àÌõ³¤Á¬½Ó£¬Ê¹Óó¤Á¬½Ó£¬ÎÒÃÇÓöµ½µÄµÚÒ»¸öÎÊÌâ¾ÍÊÇÒªÈçºÎά»¤³¤Á¬½Ó¡£
//¿Í»§¶Ë
public class NettyHandler extends SimpleChannelHandler
{ private final Map< String , Channel> channels
= new ConcurrentHashMap< String ,Channel >();
// <ip:port, channel>
}
//·þÎñ¶Ë
public class NettyServer extends AbstractServer
implements Server{private Map < String ,
Channel> channels ; // <ip:port, channel> }
|
ÔÚ Dubbo ÖУ¬¿Í»§¶ËºÍ·þÎñ¶Ë¶¼Ê¹Óà ip:port ά»¤Á˶˶Զ˵ij¤Á¬½Ó£¬Channel ±ãÊǶÔÁ¬½ÓµÄ³éÏó¡£ÎÒÃÇÖ÷Òª¹Ø×¢
NettyHandler Öеij¤Á¬½Ó£¬·þÎñ¶Ëͬʱά»¤Ò»¸ö³¤Á¬½ÓµÄ¼¯ºÏÊÇ Dubbo µÄÉè¼Æ£¬ÎÒÃǽ«ÔÚºóÃæÌáµ½¡£
Á¬½ÓµÄ±£»î
Õâ¸ö»°Ìâ¾ÍÓеÄÁÄÁË£¬»áÇ£³¶µ½±È½Ï¶àµÄ֪ʶµã¡£Ê×ÏÈÐèÒªÃ÷È·Ò»µã£¬ÎªÊ²Ã´ÐèÒªÁ¬½ÓµÄ±¨»î£¿µ±Ë«·½ÒѾ½¨Á¢ÁËÁ¬½Ó£¬µ«ÒòÎªÍøÂçÎÊÌ⣬Á´Â·²»Í¨£¬ÕâÑù³¤Á¬½Ó¾Í²»ÄÜʹÓÃÁË¡£ÐèÒªÃ÷È·µÄÒ»µãÊÇ£¬Í¨¹ý
netstat£¬lsof µÈÖ¸Áî²é¿´µ½Á¬½ÓµÄ״̬´¦ÓÚ ESTABLISHED ״̬²¢²»ÊÇÒ»¼þ·Ç³£¿¿Æ×µÄÊ£¬ÒòΪÁ¬½Ó¿ÉÄÜÒÑËÀ£¬µ«Ã»Óб»ÏµÍ³¸ÐÖªµ½£¬¸ü²»ÓÃÌá¼ÙËÀÕâÖÖÒÉÄÑÔÓÖ¢ÁË¡£Èç¹û±£Ö¤³¤Á¬½Ó¿ÉÓÃÊÇÒ»¼þ¼¼Êõ»î¡£
Á¬½ÓµÄ±£»î£ºKeepAlive
Ê×ÏÈÏëµ½µÄÊÇ TCP ÖÐµÄ KeepAlive »úÖÆ¡£KeepAlive ²¢²»ÊÇ TCP ÐÒéµÄÒ»²¿·Ö£¬µ«ÊÇ´ó¶àÊý²Ù×÷ϵͳ¶¼ÊµÏÖÁËÕâ¸ö»úÖÆ¡£KeepAlive
»úÖÆ¿ªÆôºó£¬ÔÚÒ»¶¨Ê±¼äÄÚ£¨Ò»°ãʱ¼äΪ 7200s£¬²ÎÊý tcp_keepalive_time£©ÔÚÁ´Â·ÉÏûÓÐÊý¾Ý´«Ë͵ÄÇé¿öÏ£¬TCP
²ã½«·¢ËÍÏàÓ¦µÄKeepAlive̽ÕëÒÔÈ·¶¨Á¬½Ó¿ÉÓÃÐÔ£¬Ì½²âʧ°ÜºóÖØÊÔ 10£¨²ÎÊý tcp_keepalive_probes£©´Î£¬Ã¿´Î¼ä¸ôʱ¼ä
75s£¨²ÎÊý tcp_keepalive_intvl£©£¬ËùÓÐ̽²âʧ°Üºó£¬²ÅÈÏΪµ±Ç°Á¬½ÓÒѾ²»¿ÉÓá£
ÔÚ Netty ÖпªÆô KeepAlive£º
bootstrap.option
( ChannelOption .TCP_NODELAY , true ) |
Linux ²Ù×÷ϵͳÖÐÉèÖà KeepAlive Ïà¹Ø²ÎÊý£¬ÐÞ¸Ä /etc/sysctl.conf
Îļþ£º
net.ipv4.tcp_keepalive_time=90
net.ipv4.tcp_keepalive_intvl=15
net.ipv4.tcp_keepalive_probes=2 |
KeepAlive »úÖÆÊÇÔÚÍøÂç²ãÃæ±£Ö¤ÁËÁ¬½ÓµÄ¿ÉÓÃÐÔ£¬µ«Õ¾ÔÚÓ¦Óÿò¼Ü²ãÃæÎÒÃÇÈÏΪÕ⻹²»¹»¡£Ö÷ÒªÌåÏÖÔÚÁ½¸ö·½Ã棺
KeepAlive µÄ¿ª¹ØÊÇÔÚÓ¦Óò㿪ÆôµÄ£¬µ«ÊǾßÌå²ÎÊý£¨ÈçÖØÊÔ²âÊÔ£¬ÖØÊÔ¼ä¸ôʱ¼ä£©µÄÉèÖÃÈ´ÊDzÙ×÷ϵͳ¼¶±ðµÄ£¬Î»ÓÚ²Ù×÷ϵͳµÄ
/etc/sysctl.conf ÅäÖÃÖУ¬Õâ¶ÔÓÚÓ¦ÓÃÀ´Ëµ²»¹»Áé»î¡£
KeepAlive µÄ±£»î»úÖÆÖ»ÔÚÁ´Â·¿ÕÏеÄÇé¿öϲŻáÆðµ½×÷Ó㬼ÙÈç´ËʱÓÐÊý¾Ý·¢ËÍ£¬ÇÒÎïÀíÁ´Â·ÒѾ²»Í¨£¬²Ù×÷ϵͳÕâ±ßµÄÁ´Â·×´Ì¬»¹ÊÇ
ESTABLISHED£¬Õâʱ»á·¢Éúʲô£¿×ÔÈ»»á×ß TCP ÖØ´«»úÖÆ£¬ÒªÖªµÀĬÈ쵀 TCP ³¬Ê±ÖØ´«£¬Ö¸ÊýÍ˱ÜËã·¨Ò²ÊÇÒ»¸öÏ൱³¤µÄ¹ý³Ì¡£
KeepAlive ±¾ÉíÊÇÃæÏòÍøÂçµÄ£¬²¢²»ÊÇÃæÏòÓÚÓ¦Óõ쬵±Á¬½Ó²»¿ÉÓÃʱ£¬¿ÉÄÜÊÇÓÉÓÚÓ¦Óñ¾Éí GC
ÎÊÌ⣬ϵͳ load ¸ßµÈÇé¿ö£¬µ«ÍøÂçÈÔÈ»ÊÇͨµÄ£¬´Ëʱ£¬Ó¦ÓÃÒѾʧȥÁË»îÐÔ£¬ËùÒÔÁ¬½Ó×ÔȻӦ¸ÃÈÏΪÊDz»¿ÉÓõġ£
¿´À´£¬Ó¦ÓòãÃæµÄÁ¬½Ó±£»î»¹ÊDZØÐëÒª×öµÄ¡£
Á¬½ÓµÄ±£»î£ºÓ¦ÓòãÐÄÌø
ÖÕÓÚµãÌâÁË£¬ÎÄÌâÖÐÌáµ½µÄÐÄÌø±ãÊÇÒ»¸ö±¾ÎÄÏëÒªÖØµãÇ¿µ÷µÄÁíÒ»¸ö TCP Ïà¹ØµÄ֪ʶµã¡£ÉÏÒ»½ÚÎÒÃÇÒѾ½âÊ͹ýÁË£¬ÍøÂç²ãÃæµÄ
KeepAlive ²»×ãÒÔÖ§³ÅÓ¦Óü¶±ðµÄÁ¬½Ó¿ÉÓÃÐÔ£¬±¾½Ú¾ÍÀ´ÁÄÁÄÓ¦ÓòãµÄÐÄÌø»úÖÆÊÇʵÏÖÁ¬½Ó±£»îµÄ¡£
ÈçºÎÀí½âÓ¦ÓòãµÄÐÄÌø£¿¼òµ¥À´Ëµ£¬¾ÍÊǿͻ§¶Ë»á¿ªÆôÒ»¸ö¶¨Ê±ÈÎÎñ£¬¶¨Ê±¶ÔÒѾ½¨Á¢Á¬½ÓµÄ¶Ô¶ËÓ¦Ó÷¢ËÍÇëÇó£¨ÕâÀïµÄÇëÇóÊÇÌØÊâµÄÐÄÌøÇëÇ󣩣¬·þÎñ¶ËÔòÐèÒªÌØÊâ´¦Àí¸ÃÇëÇ󣬷µ»ØÏìÓ¦¡£Èç¹ûÐÄÌø³ÖÐø¶à´ÎûÓÐÊÕµ½ÏìÓ¦£¬¿Í»§¶Ë»áÈÏΪÁ¬½Ó²»¿ÉÓã¬Ö÷¶¯¶Ï¿ªÁ¬½Ó¡£²»Í¬µÄ·þÎñÖÎÀí¿ò¼Ü¶ÔÐÄÌø£¬½¨Á¬£¬¶ÏÁ¬£¬ÀºÚµÄ»úÖÆÓв»Í¬µÄ²ßÂÔ£¬µ«´ó¶àÊýµÄ·þÎñÖÎÀí¿ò¼Ü¶¼»áÔÚÓ¦Óòã×öÐÄÌø£¬Dubbo
Ò²²»ÀýÍâ¡£
Ó¦ÓòãÐÄÌøµÄÉè¼ÆÏ¸½Ú
ÒÔ Dubbo ΪÀý£¬Ö§³ÖÓ¦ÓòãµÄÐÄÌø£¬¿Í»§¶ËºÍ·þÎñ¶Ë¶¼»á¿ªÆôÒ»¸ö HeartBeatTask£¬¿Í»§¶ËÔÚ
HeaderExchangeClient ÖпªÆô£¬·þÎñ¶Ë½«ÔÚ HeaderExchangeServer
¿ªÆô¡£ÎÄÕ¿ªÍ·ÂñÁËÒ»¸ö¿Ó£ºDubbo ΪʲôÔÚ·þÎñ¶Ëͬʱά»¤ Map<String,Channel>
ÄØ£¿Ö÷Òª¾ÍÊÇΪÁ˸øÐÄÌø×ö¹±Ï×£¬ÐÄÌø¶¨Ê±ÈÎÎñÔÚ·¢ÏÖÁ¬½Ó²»¿ÉÓÃʱ£¬»á¸ù¾Ýµ±Ç°Êǿͻ§¶Ë»¹ÊÇ·þÎñ¶Ë×ß²»Í¬µÄ·ÖÖ§£¬¿Í»§¶Ë·¢ÏÖ²»¿ÉÓã¬ÊÇÖØÁ¬£»·þÎñ¶Ë·¢ÏÖ²»¿ÉÓã¬ÊÇÖ±½Ó
close¡£
// HeartBeatTask
if(channel instanceof Client) {
((Client)channel).reconnect(); } else { channel.close(); } |
ÊìϤÆäËû RPC ¿ò¼ÜµÄͬѧ»á·¢ÏÖ£¬²»Í¬¿ò¼ÜµÄÐÄÌø»úÖÆÕæµÄÊDzî¾à·Ç³£´ó¡£ÐÄÌøÉè¼Æ»¹¸úÁ¬½Ó´´½¨£¬ÖØÁ¬»úÖÆ£¬ºÚÃûµ¥Á¬½ÓÏà¹Ø£¬»¹ÐèÒª¾ßÌå¿ò¼Ü¾ßÌå·ÖÎö¡£
³ýÁ˶¨Ê±ÈÎÎñµÄÉè¼Æ£¬»¹ÐèÒªÔÚÐÒé²ãÃæÖ§³ÖÐÄÌø¡£×î¼òµ¥µÄÀý×Ó¿ÉÒԲο¼ nginx µÄ½¡¿µ¼ì²é£¬¶øÕë¶Ô
Dubbo ÐÒ飬×ÔȻҲÐèÒª×öÐÄÌøµÄÖ§³Ö£¬Èç¹û½«ÐÄÌøÇëÇóʶ±ðΪÕý³£Á÷Á¿£¬»áÔì³É·þÎñ¶ËµÄѹÁ¦ÎÊÌ⣬¸ÉÈÅÏÞÁ÷µÈÖî¶àÎÊÌâ¡£

ÆäÖÐ Flag ´ú±íÁË Dubbo ÐÒéµÄ±ê־룬һ¹² 8 ¸öµØÖ·Î»¡£µÍËÄλÓÃÀ´±íʾÏûÏ¢ÌåÊý¾ÝÓõÄÐòÁл¯¹¤¾ßµÄÀàÐÍ£¨Ä¬ÈÏ
hessian£©£¬¸ßËÄλÖУ¬µÚһλΪ1±íʾÊÇ request ÇëÇ󣬵ڶþλΪ 1 ±íʾ˫Ïò´«Ê䣨¼´Óзµ»Øresponse£©£¬µÚÈýλΪ
1 ±íʾÊÇÐÄÌøÊ¼þ¡£
ÐÄÌøÇëÇóÓ¦µ±ºÍÆÕͨÇëÇóÇø±ð¶Ô´ý¡£
×¢ÒâºÍ HTTP µÄ KeepAlive Çø±ð¶Ô´ý
HTTP ÐÒéµÄ KeepAlive ÒâͼÔÚÓÚÁ¬½Ó¸´Óã¬Í¬Ò»¸öÁ¬½ÓÉÏ´®Ðз½Ê½´«µÝÇëÇó-ÏìÓ¦Êý¾Ý
TCP µÄ KeepAlive »úÖÆÒâͼÔÚÓÚ±£»î¡¢ÐÄÌø£¬¼ì²âÁ¬½Ó´íÎó¡£
Õâѹ¸ùÊÇÁ½¸ö¸ÅÄî¡£
KeepAlive ³£¼ûÒì³£
ÆôÓà TCP KeepAlive µÄÓ¦ÓóÌÐò£¬Ò»°ã¿ÉÒÔ²¶»ñµ½ÏÂÃæ¼¸ÖÖÀàÐÍ´íÎó
ETIMEOUT ³¬Ê±´íÎó£¬ÔÚ·¢ËÍÒ»¸ö̽²â±£»¤°ü¾¹ý (tcpkeepalivetime + tcpkeepaliveintvl
* tcpkeepaliveprobes)ʱ¼äºóÈÔȻûÓнÓÊÕµ½ ACK È·ÈÏÇé¿öÏ´¥·¢µÄÒì³££¬Ì×½Ó×Ö±»¹Ø±Õ
java java.io.IOException:Connectiontimedout
EHOSTUNREACH host unreachable(Ö÷»ú²»¿É´ï)´íÎó£¬Õâ¸öÓ¦¸ÃÊÇ ICMP
»ã±¨¸øÉϲãÓ¦Óõġ£ java java.io.IOException:Noroute to host
Á´½Ó±»ÖØÖã¬ÖÕ¶Ë¿ÉÄܱÀÀ£ËÀ»úÖØÆôÖ®ºó£¬½ÓÊÕµ½À´×Ô·þÎñÆ÷µÄ±¨ÎÄ£¬È»ÎïÊÇÈË·Ç£¬Ç°³¯ÍùÊ£¬Ö»Äܱ¨ÒÔÎÞÄÎÖØÖÃÐû¸æÖ®¡£
java java.io.IOException:Connectionresetbypeer
×ܽá
ÓÐÈýÖÖʹÓà KeepAlive µÄʵ¼ù·½°¸£º
ĬÈÏÇé¿öÏÂʹÓà KeepAlive ÖÜÆÚΪ 2 ¸öСʱ£¬È粻ѡÔñ¸ü¸Ä£¬ÊôÓÚÎóÓ÷¶³ë£¬Ôì³É×ÊÔ´ÀË·Ñ£ºÄں˻áΪÿһ¸öÁ¬½Ó¶¼´ò¿ªÒ»¸ö±£»î¼ÆÊ±Æ÷£¬N
¸öÁ¬½Ó»á´ò¿ª N ¸ö±£»î¼ÆÊ±Æ÷¡£ ÓÅÊÆºÜÃ÷ÏÔ£º
TCP ÐÒé²ãÃæ±£»î̽²â»úÖÆ£¬ÏµÍ³ÄÚºËÍêÈ«ÌæÉϲãÓ¦ÓÃ×Ô¶¯¸ø×öºÃÁË
Äں˲ãÃæ¼ÆÊ±Æ÷Ïà±ÈÉϲãÓ¦Ó㬸üΪ¸ßЧ
ÉϲãÓ¦ÓÃÖ»ÐèÒª´¦ÀíÊý¾ÝÊÕ·¢¡¢Á¬½ÓÒ쳣֪ͨ¼´¿É
Êý¾Ý°ü½«¸üΪ½ô´Õ
¹Ø±Õ TCP µÄ KeepAlive£¬ÍêȫʹÓÃÓ¦ÓòãÐÄÌø±£»î»úÖÆ¡£ÓÉÓ¦ÓÃÕÆ¹ÜÐÄÌø£¬¸üÁé»î¿É¿Ø£¬±ÈÈç¿ÉÒÔÔÚÓ¦Óü¶±ðÉèÖÃÐÄÌøÖÜÆÚ£¬ÊÊÅä˽ÓÐÐÒé¡£
ÒµÎñÐÄÌø + TCP KeepAlive Ò»ÆðʹÓ㬻¥Ïà×÷Ϊ²¹³ä£¬µ« TCP ±£»î̽²âÖÜÆÚºÍÓ¦ÓõÄÐÄÌøÖÜÆÚҪе÷£¬ÒÔ»¥²¹·½¿É£¬²»Äܹ»²î¾à¹ý´ó£¬·ñÔò½«´ï²»µ½ÉèÏëµÄЧ¹û¡£
¸÷¸ö¿ò¼ÜµÄÉè¼Æ¶¼ÓÐËù²»Í¬£¬ÀýÈç Dubbo ʹÓõÄÊÇ·½°¸Èý£¬µ«°¢ÀïÄÚ²¿µÄ HSF ¿ò¼ÜÔòûÓÐÉèÖÃ
TCP µÄ KeepAlive£¬½ö½öÓÉÓ¦ÓÃÐÄÌø±£»î¡£ºÍÐÄÌø²ßÂÔÒ»Ñù£¬ÕâºÍ¿ò¼ÜÕûÌåµÄÉè¼ÆÏà¹Ø¡£
|