서버가 강제 종료 당했을 시 ..

yari71의 이미지

운영자가 모르고 데몬을 SIGKILL (kill -9 pid) 로 죽였을 때..
이때는 정상적인 소켓 close가 되지 않고 데몬이 죽어버립니다.

문제는 .. 데몬이 죽었는데도 netstat 하면 LISTEN으로 나온다는 것입니다. TIME_WAIT가 아닙니다.

[mysvr] netstat -a | grep 7002
tcp 0 0 *.7002 *.* LISTEN
51ede080 dgram 0 0 502b31c0 502fb7c0 0
5098a240 /opt/dcelocal/var/rpc/local/01759/c-3/7002

당근 재 실행하면 bind 에러 납니다.
이 상태가 며칠을 갑니다. 45초가 아니고... ㅠㅠ. 도저히 이해가 안되는군요..
프로세스도 없는데 누가 저 소켓을 잡고 있는건가.. 쩝.
다른 프로세스가 쓰는 포트도 아니고. inetd에 등록된 포트도 당근 아닙니다.

소켓 옵션은
setsockopt(s_fd,SOL_SOCKET,SO_REUSEADDR,(char *)&iFlag,sizeof(iFlag)) 와 같이 주었습니다..
소켓 생성 후 바로 주었구요.. bind 하기 전입니다.

아무리 Q/A를 찾아봐도 REUSEADDR 옵션 얘기 밖에 없던데..
OS는 HP_UX입니다. (리눅스 아닙니다. 죄송..^^;)

SIGKILL 만 처리 할 수 있어도 이런 문제는 없을 텐데.. 그것도 안되니.. SIGKILL은 사용자 handler를 지정할 수 없더군요.

부탁드립니다.

happycat의 이미지

아.. 난감한 상황이군요.

프로그램 종료시에 사용하던 자원은 닫아주는게 정상인데 그것도 안되고, TIME_WAIT 상태가 아니니 RESUEADDR도 먹을리 만무하고, SIGKILL은 말씀하셨다시피 처리가 불가능한 시그널입니다.;;

일단은 OS가 처리를 잘못해 준다 싶은데, 마뜩한 방법이 떠오르지 않는군요.;;

ssehoony의 이미지

제 생각엔 7002 포트를 리슨하는 데몬이 살아 있을 듯 한데요.
kill 로 죽어도 OS 가 소켓 알아서 닫아 줍니다.

OS 가 잘 못 처리해 준다는 생각은 99.99% 안하셔도 됩니다.
이미 수 많은 사용자가 OS를 검증했으니깐요.
netstat 로 pid 도 알아 낼 수 있으니깐 그거 리슨하고 있는 녀석 pid 를 알아내서 확인해 보세요.
아무리 봐도 OS 문제 같다면 커널 patch 가 있나 확인해 보세요.

morison77의 이미지

질문에서의 서버가 어떤 서버인지는 알수 없지만..
혹시 이런 상황이 아닐까 유추해봅니다..

제가 볼땐 질문하신분이 말씀하신 서버가 혹시
Listen 후 몇개의 Child를 Pre Fork 하여 클라이언트의
요구를 처리하는 서버 같습니다.

Sig Handler 에 이 Child를 Kill 시키는 루틴이 있으나
SIG Kill을 받고 Sig Handler를 처리하지 못하고 죽은것 같습니다.
그래서 생성되었던 Child가 계속 Listen하는 상황인듯 합니다.

어떤 프로세스던 간에 종료시에는 자신이 사용하던 모든 자원을
환원합니다. 그것이 비정상적인 종료라해도 말이죠..
그러므로 그 프로세스가 정상적이건 비정상적이건
종료되었다면 소켓또한 닫히게 됩니다.

해결방법은 lsof 라는 현재 열려진 파일과 그 파일을 사용하는 프로세스 정보등을 얻는 유틸이 있습니다.
구글에서 찾아보시면 사용법과 설치 방법등을 구하실수 있을겁니다.

또는 HP-UX의 경우 HP-UX에 설치되는 glance라는 유틸이 있는데 이를 통해 현재 열려진 파일들과 그 파일들을 사용하는 프로세스등을 얻을수 있습니다.

그럼 도움이 되셨기를..

light my fire

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.