TIME_WAIT 를 없애는 방법 좀 알려주세요

panda9의 이미지

linux(Red Hat, Kernel 2.4.9-21smp) 에서 php 4.2.2 를 사용하구요.
php CLI 를 이용, CRON 으로 원격에 있는 mysql 서버(mysql-3.23.54a)에 접속하는 프로그램을 실행시키고 있습니다.

그런데 원격에 있는 mysql 서버가 문제가 생겨 몇시간 동안 다운된 적이 있고 이 시간동안 로컬에 있는 php 프로그램은 CRON으로 실행하여
mysql 서버와 접속을 계속 시도한 것으로 보여집니다.
그래서 그런지 netstat -t 로 확인해 보면, 며칠째 원격에 있는 DB 서버로 수십개 이상의 TIME_WAIT 를 볼 수 있습니다.

이 수십걔의 TIME_WAIT 때문인지 실제 로컬버서 이용자가 이전에 비해 많은 않은 경우에도 cpu idle 을 거의 없고 load average 로 이전보다 높은 현상을 보입니다.

이러한 경우 TIME_WAIT 를 없앨 수는 없나요?
완전히 다시 리부팅을 하면 좋겠는데 현재 서비스중인 서버라 리부팅하기가
좀 어려운 상황이라서요.

여러분의 조언 부탁드립니다.

codebank의 이미지

TIME_WAIT자체를 없애는 방법은 음...

일단 TIME_WAIT가 발생하는 원인부터 보세요.

http://kldp.org/~kabin/doc/sockfaq2.htm

아마 2.7 에 TIME_WAIT가 발생하는 이유에 대해서 나오게 되어있네요.
계속 반복이라니... 쩝...
번역문에도 써있지만 반복주기는 2*MSL정도라고 되어있습니다.
문제는 어느쪽이라고 꼭집어서 말할 수 없는것 같네요. 신뢰성의 문제라...

궁금한건 TIME_WAIT가 과연 네트워크 트래픽을 올리는 원인이 된다면
그리고 실제로 그것이 눈에 보일정도로 심각하다면 왜 운영자에게 이야기를
하지 않느냐입니다. 어차피 서버라면 어느정도 속도가 중요한데 말이죠.

결론... 이라고 까지는 말할 수 없겠지만 어쨌든...
가장 간단한 방법은 서버를 ReBooting하는 방법입니다. <-- 이건 안된다고 했으니...
두번째 방법은 TIME_WAIT를 일으킨 서비스를 재 실행하는겁니다.
경험상 서버스를 재실행하면 TIME_WAIT는 한순간 없어지더군요.

물론 위 두번째 방법은 다른 곳에서는 용이하지 않을 수도 있습니다.
만일 포트 관리를 다른 서비스(xinetd)가 맡고 있다면... ㅤㅉㅡㅂ...
아직은 이런현상을 보질못해서... 단독적인 프로그램에서 생긴 경우에만
해당될지 모르겠군요.

어쨌든...
해당 서비스에 대한 재실행이 답일 수 있습니다.
xinetd이 관리할 때는 어떻게 되는지 안해봐서 모르겠습니다.
((사장님께 건의를 드리는방법이 정신건강상 좋을것 같군요. :))

------------------------------
좋은 하루 되세요.

hakhang의 이미지

codebank님이 알려주신 문서에 TIME_WAIT가 발생하는 원인은
잘 나와 있으므로, 없애는 방법만 간단히 소개합니다.

client application에서 socket option 중 linger option을 off 시키면,
client에 의한 connection close시 TIME_WAIT 상태를 거치지 않고
ClOSED 상태로 바뀌게 되므로, TIME_WAIT 상태가 발생하지 않습니다.

이미 발생한 TIME_WAIT 상태는 일정시간이 지나면 없어지는데,
client가 server 매우 빈번히 connect/disconnect를 반복한다면
많은 TCP port가 TIME_WAIT 상태가 되서 문제가 생길 수 있습니다.

아래 linger option을 off하는 간단한 코드 예입니다.

    /* 중략 */
    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))



도움이 되셨기를...[/code]
preisner의 이미지

실제 time_wait로 인해 부하가 걸리지는 않습니다.
TCP/IP 통신에서 TIME_WAIT 상태를 유지하는데는 이유가 있습니다.
그냥 없앤다고 문제가 해결되진 않습니다.
오히려 통신이 불안해 질 수 있습니다.

웹서버를 운영해 보시면 TIME_WAIT 상태가 수십, 수백개가 생기기도 합니다.
실제로는 이것으로 인해 별 문제는 없습니다.
오히려 SYN_RECV가 너무 많다면 문제가 생길수도 있습니다만,
(DOS 공격을 받고 있을 수 있습니다.)
TIME_WAIT 상태가 너무 많아 문제가 생긴다고 보긴 어렵겠습니다.
(수천개 정도라면 좀 다르겠지만요. 수십개정도는 일반적인 수준입니다.
수천개가 생긴다면 TIME_WAIT으로 인해 생기는 문제 보다는 전체적으로
서버에 부하가 많은것이 더 큰 문제라 생각됩니다.)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.