#define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT
* state, about 60 seconds */
와 같이 static 하게 지정이 되도록 변경이 되었습니다. TIME_WAIT 관련하여 검색을 해 보면.. 거의 대부분 관련이 없는 tcp_fin_timeout 값을 줄이라는 식의 글들이 많고, 가끔.. TCP_TIMEWAIT_LEN 의 값을 수정하라는 문서들이 있더군요. (물론 한글 문서로는 이런 글은 못찾았습니다. ^^)
하지만, TCP_TIMEWAIT_LEN 의 값이 다른 값을 생성하는데 꽤 많이 쓰이는 관계로 이 값을 수정하는 것은 조금 애매해서 TIME_WAIT 에만 적용될 수 있도록 패치를 해 보았습니다. 또한, TIME_WAIT 을 static 하게 수정해서 빌드를 하면 그때 그때 커널이 달라져야 할 수 있어서 아예 sysctl 에서 관리할 수 있도록 수정했습니다. 다음 패치 파일을 받아서 적용하여 빌드 하시면 sysctl -a 에서 tcp_timewait 항목을 찾으실 수 있습니다.
tcp_timewait 을 0 으로 지정을 하면 기본값인 TCP_TIMEWAIT_LEN (60초)를 사용하게 되게 되어 있으므로, 최소값은 1초가 됩니다.
oops-2.4.34-sysctl-timewait.patch.gz
kernel 2.4.34 patch (AnNyung)
redhat-rhel4-2.6.9-42.0.10-timewait-sysctl.patch.gz
Redhat 4 update 4 patch
linux-2.6.21.1-banilla-timewait-sysctl.patch.gz
kernel 2.6.21.1 patch (Vanilla)
2.6.21.1 의 Vanilla kernel patch 는 실제로 빌드를 해 보지 않았습니다. 그리고 tcp_minisock.c 가 많이 변경이 되어 제대로 빌드가 될지 그리고 제대로 작동이 되는지 테스트를 해 보지 않은 것임을 알려 드립니다. 이 패치를 사용함에 있어 문제 발생시에 저는 책임을 지지 않습니다!