|
|
°Ô½Ã¹° 1,369°Ç
|
|
|
TIME_WAIT ¾ø¾Ö±â |
|
±Û¾´ÀÌ :
ÃÖ°í°ü¸®ÀÚ
³¯Â¥ : 2010-11-17 (¼ö) 12:06
Á¶È¸ : 13947
|
|
±ÛÁÖ¼Ò :
|
-
- 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ÀÇ ¼º´ÉÁß Ã³¸®·®À» ÃøÁ¤Çϱâ À§Çؼ ¼ö¹é°³ÀÇ Å¬¶óÀ̾ðÆ®·Î µ¿Á¢»óȲÀ» ½Ã¹Ä·¹ÀÌ¼Ç ÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé¾î¼ Å×½ºÆ®ÇÏ´ø Áß ´ÙÀ½°ú °°Àº ¹®Á¦°¡ ¹ß»ýÇß´Ù.
- open ÆÄÀÏ Á¦ÇÑ °¹¼ö
À̹®Á¦´Â /proc/sys/fs/file-max ÀÇ °ªÀ» Á¶ÀýÇÏ´Â °É·Î °£´ÜÈ÷ ÇØ°áÇß´Ù.
- 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ÀÚ¿ø¿¡ ´ëÇÑ »ç¿ëÀ» º¯°æÇÒ ¼öµµ ÀÖ´Ù.
|
|
|
|
|
|