파일에 관한 두가지 질문.
글쓴이: 지나가는새 / 작성시간: 월, 2003/06/09 - 7:41오후
데몬이 어느순간부터 동작을 하지 않습니다.
물론 프로세스는 살아 있구요.
그래서 strace로 왜 그런지 살펴봤습니다.
그런데, 계속 파일 오픈에서 에러가 나더군요.
rt_sigprocmask(SIG_SETMASK, [ALRM 32], NULL, 8) = 0 --- SIGCHLD (Child exited) --- open("/tmt/proc.tmp", O_RDONLY) = -1 EMFILE (Too many open files) socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = -1 EMFILE (Too many open files) socket(PF_UNIX, SOCK_STREAM, 0) = -1 EMFILE (Too many open files) socket(PF_UNIX, SOCK_STREAM, 0) = -1 EMFILE (Too many open files) socket(PF_UNIX, SOCK_STREAM, 0) = -1 EMFILE (Too many open files) socket(PF_UNIX, SOCK_STREAM, 0) = -1 EMFILE (Too many open files) sigreturn() = ? (mask now []) rt_sigprocmask(SIG_BLOCK, [CHLD], [32], 8) = 0 rt_sigaction(SIGCHLD, NULL, {SIG_DFL}, 8) = 0
man open 해 보니까 다음과 같은 설명이 있었습니다.
EMFILE The process already has the maximum number of files open. ENFILE The limit on the total number of files open on the system has been reached.
질문은 두가지 입니다.
EMFILE에러 즉, 열려진 파일이 너무 많다는 것은,
동일시점에서 open한 파일이 많다는것을 뜻하는 것인가요, 아니면 하나의 프로세서가 열어본 파일의 갯수가 많다는 뜻인가요? 첫번째는 해당사항 없고 두번째는 가능성이 있습니다만 설마 그럴까 하고 생각하고 있습니다.
두번재질문은, 그럼에도 불구하고 제가 혹시 닫지 못한 파일이 넘쳐나서 그렇게 된것은 아닌가 하고 의심해 봅니다. 소스상으로는 문제가 없어 보이지만, 버그라는게 드러나면 버그가 아닌고로..
이 때, 시스템에서 열려진 FD를 알아보고 싶은데요, 물론 실시간으로요, 어떤 방법이 있을까요?
도움 부탁 드리겠습니다.
Forums:
opne에 리턴하는 fd로도 확인 가능합니다.
open이 리턴하는 fd값으로도 확인 가능합니다.
외부에서는 /proc/(해당프로세스pid)/fd
를 보시면 어떤 fd가 열렸는지 확인 됩니다.
울랄라~ 호기심 천국~!!
http://www.ezdoum.com
[quote]EMFILE에러 즉, 열려진 파일이 너무 많다는 것은,
해당 시점에서 open 되어 있는 파일이 많다는 의미입니다.
아마도 fd 처리가 제대로 안 된 듯 합니다.
(당연히 유닉스에서는 소켓도 파일로 취급하니까, 위의 경우라면
아마도 소켓을 제대로 안 닫아 주어서 문제가 발생한 걸로 보입니다.)
두 번째 질문은 아래 링크를 참조하세요.
http://bbs.kldp.org/viewtopic.php?t=20215&start=0&postdays=0&postorder=asc&highlight=
댓글 달기