열린 소켓을 강제로 닫으려면 어떻게 해야 하나요?
# netstat -na|grep :1234
tcp 0 0 :::1234 :::* LISTEN
tcp 7 0 12.34.56.78:1234 211.216.xx.xx:33074 CLOSE_WAIT
tcp 21 0 12.34.56.78:1234 61.97.xx.xx:3508 CLOSE_WAIT
tcp 27 0 12.34.56.78:1234 219.248.xx.xx:1576 CLOSE_WAIT
tcp 7 0 12.34.56.78:1234 218.52.xx.xx:46421 CLOSE_WAIT
tcp 10 0 12.34.56.78:1234 165.243.x.xxx:4180 CLOSE_WAIT
tcp 26 0 12.34.56.78:1234 211.216.xx.x:3920 CLOSE_WAIT
...............
...............
netstat를 보면 위처럼 소켓(?)들이 많이 열려 있습니다.
우선 상황을 말씀 드리면.. 자바로 구현된 소켓 프로그램이 백그라운드로 돌아가고 있습니다.
근데.. 이놈이 netstat -na|grep :1234|wc -l 해서 1000 이상이 되면 더이상 접근을 허용하지 않습니다..(당연한 것이겠지만..)
그래서 찾아보니 해당 소켓의 제한을 커널상에서 수치를 늘려주면 된다는 것도 알게 되었습니다.
그러나, 그것보다 close_wait 된 거나.. 쓸모없는 것 소켓을 닫아버리고 싶습니다.
클라이언트쪽에서 접속을 끊어도 서버상에는 소켓이 일정시간동안 존재하더군요..
이런 쓸떼없는 것들을 크론이나 쉘 스크립트등을 이용해 강제로 닫을수는 없나요??
방법이 있을것도 같기도 한데..
그리고 커널 재빌드말고, 손쉽게 소켓의 수치를 늘일 방법이 없나요??
아니면 접속이 끊어지고.. 소켓이 소멸되는 시간을 좀더 빨리 할수 있는 방법이라도 없는지요??
알려주시면 감사하겠습니다.
http://bbs.kldp.org/viewtopic.php?t=2337
http://bbs.kldp.org/viewtopic.php?t=23371
답변 감사합니다.. ^^;검색한다고 했는데.. 나는 왜 못 찾는지..
답변 감사합니다.. ^^;
검색한다고 했는데.. 나는 왜 못 찾는지.. 떱..
원하는 답변인것 같은데.. 답이 너무 어렵네요... ㅜ.ㅜ
일단.. 실제로는 프로그램상 혹은 네트워크상 버그 혹은 에러인데S
일단.. 실제로는 프로그램상 혹은 네트워크상 버그 혹은 에러인데
SE적인 해결책은 이러합니다.
(완벽하진 않습니다 )
/etc/sysctl.conf 에
net.ipv4.tcp_fin_timeout=1
를 추가 하시고 sysctl -p 해보십시오.
tcp 관련 과정에 보면.. 연결을 끊고 만들고 하는 부분들이 있습니다
그부분의 설정값들을 강제적으로 조정해주는겁니다.
(운영중인 써버에는 치명적일수도 있습니다 )
관련하여 여러값들이 있으니 sysctl -a 해서 찻아보시기 바랍니다.
------------------------------------------------------------------------------------------------
Life is in 다즐링
댓글 달기