¿ù°£ Àα⠰Խù°

°Ô½Ã¹° 1,358°Ç
   
TIME_WAIT ¾ø¾Ö±â
±Û¾´ÀÌ : ÃÖ°í°ü¸®ÀÚ ³¯Â¥ : 2010-11-17 (¼ö) 12:06 Á¶È¸ : 13629
±ÛÁÖ¼Ò :
                                
1 TIME_WAIT ¿¡ ´ëÇؼ­
2 TIME_WAIT ¹®Á¦ ¹ß»ý »óȲ
3 ¼ÒÇÁÆ®¿þ¾îÀûÀÎ ÇØ°á
3.1 ¼ÒÄÏ¿É¼Ç º¯°æ : linger
3.2 ¼ÒÄÏ¿É¼Ç º¯°æ : SO_REUSEADDR
4 Ä¿³Î·¹º§¿¡¼­ÀÇ ÇØ°á
4.1 client Port range º¯°æ
4.2 tcp_fin_timeout
4.3 timewait ¼³Á¤ º¯°æ
5 Âü°í

1 TIME_WAIT ¿¡ ´ëÇؼ­




¸¸µé¾îÁø TCP¿¬°áÀÌ Á¾·áµÇ±â À§Çؼ­´Â FINÆÐŶ ±³È¯ÀÌ ÀÌ·ç¾îÁø´Ù. À̶§ ¿ì¾ÆÇÑ Á¾·á°¡ ÀÌ·ç¾îÁö±â À§Çؼ­´Â ÃÑ 4¹øÀÇ ÆÐŶ±³È¯ÀÌ ÇÊ¿äÇÏ°Ô µÈ´Ù. ¿ì¾ÆÇÑ Á¾·á¶ó´Â °ÍÀº ¿¬°áµÈ È£½ºÆ® ¾çÂÊÀÌ ¸ðµÎ ¿¬°áÀÌ Á¾·áµÇ¾úÀ½À» ¾Ë°Ô µÇ´Â »óÅ´Ù. ¸¸¾à FIN ÆÐŶÀ» º¸³Â´Âµ¥, »ó´ë È£½ºÆ®¿¡¼­ ACK ÆÐŶÀ» º¸³»Áö ¾Ê°í Á¾·áÇعö¸®´Â °æ¿ì FINÀ» º¸³½ÃøÀº ¿ì¾ÆÇÑ Á¾·á¸¦ À§Çؼ­ ÀÏÁ¤½Ã°£ ACK¸¦ ±â´Ù¸®°Ô µÈ´Ù. ¸®´ª½ºÀÇ °æ¿ì ´ë·« 90ÃÊ Á¤µµ¸¦ ±â´Ù¸°´Ù. netstat(1)·Î È®ÀÎÇØ º¸¸é TIME_WAITÀÎ »óÅ·Π³ªÅ¸³­´Ù.

TIME_WAIT»óÅÂÀÏ °æ¿ì ÇØ´ç Æ÷Æ®¸¦ °è¼Ó Á¡À¯Çϴµ¥, ¿¬°áÀÌ ºó¹øÇÑ ³×Æ®¿öÅ© ¼­ºñ½ºÀÏ °æ¿ì ¿¬°á°ÅºÎ¿Í °ü·ÃµÈ ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù.

2 TIME_WAIT ¹®Á¦ ¹ß»ý »óȲ

mysqlÀÇ ¼º´ÉÁß Ã³¸®·®À» ÃøÁ¤Çϱâ À§Çؼ­ ¼ö¹é°³ÀÇ Å¬¶óÀ̾ðÆ®·Î µ¿Á¢»óȲÀ» ½Ã¹Ä·¹ÀÌ¼Ç ÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé¾î¼­ Å×½ºÆ®ÇÏ´ø Áß ´ÙÀ½°ú °°Àº ¹®Á¦°¡ ¹ß»ýÇß´Ù.
  1. open ÆÄÀÏ Á¦ÇÑ °¹¼ö
    À̹®Á¦´Â /proc/sys/fs/file-max ÀÇ °ªÀ» Á¶ÀýÇÏ´Â °É·Î °£´ÜÈ÷ ÇØ°áÇß´Ù.
  2. TIME_WAIT
    ¸Å¿ì ¹Ù»Û µ¿Á¢Å×½ºÆ® ȯ°æÀ» ¸¸µé±â¸¦ ¿øÇß´Ù. ÀÌ °æ¿ì connect¿Í close°¡ ºó¹øÇÏ°Ô ¹ß»ýÇϴµ¥, TIME_WAIT°¡ °è¼Ó ´Ã¾î³ª°Ô µÇ°í °á±¹¿¡´Â ÇÒ´ç°¡´ÉÇÑ PORT¸¦ ¸ðµÎ ¼ÒºñÇؼ­ ´õÀÌ»ó ¿¬°áÀ» ÇÒ ¼ö ¾ø´Â »óȲÀÌ ¹ß»ýÇß´Ù.

3 ¼ÒÇÁÆ®¿þ¾îÀûÀÎ ÇØ°á

3.1 ¼ÒÄÏ¿É¼Ç º¯°æ : linger

Á÷Á¢ ³×Æ®¿öÅ© ÇÁ·Î±×·¥À» Á¦ÀÛÇÑ´Ù¸é °¡Àå ÁÁÀº ¹æ¹ýÀÏ °ÍÀÌ´Ù. ±×·¯³ª ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ Á¦°øÇÏ´Â API¸¦ ÀÌ¿ëÇÑ ÇÁ·Î±×·¡¹Ö¿¡´Â Àû¿ëÇÒ ¼ö ¾ø´Ù.

¿¹¸¦µé¾î Mysql DB ¼º´ÉÃøÁ¤À» À§Çؼ­, Mysql API¸¦ ÀÌ¿ëÇؼ­ ÃøÁ¤ Ŭ¶óÀ̾ðÆ®¸¦ °³¹ßÇÒ °æ¿ì¿¡´Â ¼ÒÄϿɼÇÀ» Á¦¾îÇÒ ¼ö°¡ ¾ø´Ù.

´ÙÀ½Àº socket¿É¼ÇÀ» ÀÌ¿ëÇؼ­ TIME_WAITÀÌ ¹ß»ýÇÏÁö ¾Êµµ·Ï ÇÏ´Â ÄÚµå´Ù.
    ...  
    int sock 
    struct linger   ling; 
 
    ling.l_onoff = 1; 
    ling.l_linger = 0;      /* 0 for abortive disconnect */ 
 
    ... 
    ... 
 
    setsockopt(sock, SOL_SOCKET, SO_LINGER, &ling, sizeof(ling)) 
 

3.2 ¼ÒÄÏ¿É¼Ç º¯°æ : SO_REUSEADDR

SO_REUSEADDR ¿É¼ÇÀ» »ç¿ëÇϸé, TIME_WAIT »óÅ¿¡ ÀÖ´Â PORT¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô µÈ´Ù. ¼­¹öÇÁ·Î±×·¥ÀÌ ºñÁ¤»óÀûÀ¸·Î Á¾·áµÇ°Ç³ª Ŭ¶óÀ̾ðÆ®¸¦ Á¤¸®ÇÏÁö ¾Ê°í Á¾·áµÇ¸é TIME_WAIT »óÅ·Π³Ñ¾î°¡°Ô µÈ´Ù. À̶§ ¼­¹ö ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°¸é bind() ¿¡·¯°¡ ¹ß»ýÇϴµ¥, ÀÌ ¿É¼ÇÀ» ÀÌ¿ëÇؼ­ bind()¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Ù.
setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option)); 
 

4 Ä¿³Î·¹º§¿¡¼­ÀÇ ÇØ°á

4.1 client Port range º¯°æ

¸Å¿ì ¹Ù»Û Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥ÀÏ °æ¿ì¿¡ ´ë·®ÀÇ TIME_WAIT°¡ ¹ß»ýÇؼ­ ÇÒ´çÇØ¾ßµÉ PORT°¡ ºÎÁ·ÇÒ ¼ö°¡ ÀÖ´Ù. Ŭ¶óÀ̾ðÆ®¿¡ ÇÒ´çµÉ portÀÇ ¹üÀ§¸¦ ´Ã¸®´Â °ÍÀ¸·Î ¾î´ÀÁ¤µµ Á¶Á¤°¡´ÉÇÏ´Ù.
  • /proc/sys/net/ipv4/ip_local_port_range
º¸Åë 32768 61000·Î ÁöÁ¤µÇ¾î ÀÖÀ» °ÍÀÌ´Ù. 1024 ~ 65535 ·Î º¯°æÇÏÀÚ.
# echo "1024 ~ 65535" > /proc/sys/net/ipv4/ip_local_port_range 
 

ÀÌ°ÍÀº ¾îµð±îÁö³ª ÀÓ½ÃÀûÀÎ ¹æ¹ýÀ¸·Î, ¹®Á¦¸¦ ¿ÏÀüÈ÷ ÇØ°áÇÒ ¼ö´Â ¾øÀ» °Å´Ù.

4.2 tcp_fin_timeout

¼ÒÄÏÀÌ ¿ÏÀüÈ÷ ´ÝÈú·Á¸é ¸¶Áö¸· FINÀ» ±â´Ù·Á¾ß Çϴµ¥, ÀÌ °£°ÝÀ» ÃÊ´ÜÀ§·Î ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ¾Æ¸¶ 60ÃÊ Á¤µµ·Î ¼³Á¤µÇ¾î ÀÖÀ» °ÍÀÌ´Ù. 10ÃÊÀÌÇÏ·Î ÁÙ¿©º¸µµ·Ï ÇÏÀÚ.

4.3 timewait ¼³Á¤ º¯°æ

Ä¿³Î·¹º§¿¡¼­ TIME-WAITÀÚ¿ø¿¡ ´ëÇÑ »ç¿ëÀ» º¯°æÇÒ ¼öµµ ÀÖ´Ù.
  • tcp_tw_recycle
    ±âº»°ªÀº 0Àε¥, 1·Î ÇÒ°æ¿ì TIME-WAIT »óŸ¦ ºü¸£°Ô recycling Çϵµ·Ï µµ¿ÍÁØ´Ù. ÀÌ¿¡ ´ëÇÑ ¸íÈ®ÇÑ Á¤º¸¸¦ ¾ò±â Èûµé¾ú´Ù.
  • tcp_tw_reuse
    ±âº»°ªÀº 0Àε¥, 1·Î ÇÒ°æ¿ì TIME-WAIT »óÅÂÀÇ ¼ÒÄÏÀ» Àç»ç¿ëÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. TIME-WAIT ¹®Á¦¸¦ ÇÇÇϱâ À§ÇÑ °¡Àå È®½ÇÇÑ ¹æ¹ýÀÌ´Ù. setsockopt()¿¡ SO_REUSEADDRÀ» »ç¿ëÇÑ °Í°ú °°Àº È¿°ú.

À̸§ Æнº¿öµå
ºñ¹Ð±Û (üũÇÏ¸é ±Û¾´À̸¸ ³»¿ëÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.)
¿ÞÂÊÀÇ ±ÛÀÚ¸¦ ÀÔ·ÂÇϼ¼¿ä.
   

 



 
»çÀÌÆ®¸í : ¸ðÁö¸®³× | ´ëÇ¥ : ÀÌ°æÇö | °³ÀÎÄ¿¹Â´ÏƼ : ·©Å°´åÄÄ ¿î¿µÃ¼Á¦(OS) | °æ±âµµ ¼º³²½Ã ºÐ´ç±¸ | ÀüÀÚ¿ìÆí : mojily°ñ¹ðÀÌchonnom.com Copyright ¨Ï www.chonnom.com www.kyunghyun.net www.mojily.net. All rights reserved.