파일에 관한 두가지 질문.

지나가는새의 이미지

데몬이 어느순간부터 동작을 하지 않습니다.
물론 프로세스는 살아 있구요.

그래서 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를 알아보고 싶은데요, 물론 실시간으로요, 어떤 방법이 있을까요?

도움 부탁 드리겠습니다.

choissi의 이미지

open이 리턴하는 fd값으로도 확인 가능합니다.

외부에서는 /proc/(해당프로세스pid)/fd
를 보시면 어떤 fd가 열렸는지 확인 됩니다.

울랄라~ 호기심 천국~!!
http://www.ezdoum.com

shkwon81의 이미지

Quote:
EMFILE에러 즉, 열려진 파일이 너무 많다는 것은,

동일시점에서 open한 파일이 많다는것을 뜻하는 것인가요, 아니면 하나의 프로세서가 열어본 파일의 갯수가 많다는 뜻인가요? 첫번째는 해당사항 없고 두번째는 가능성이 있습니다만 설마 그럴까 하고 생각하고 있습니다.

해당 시점에서 open 되어 있는 파일이 많다는 의미입니다.
아마도 fd 처리가 제대로 안 된 듯 합니다.
(당연히 유닉스에서는 소켓도 파일로 취급하니까, 위의 경우라면
아마도 소켓을 제대로 안 닫아 주어서 문제가 발생한 걸로 보입니다.)

두 번째 질문은 아래 링크를 참조하세요.

http://bbs.kldp.org/viewtopic.php?t=20215&start=0&postdays=0&postorder=asc&highlight=

댓글 달기

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