free 시도 중 killed가 발생합니다

heewon의 이미지

안녕하세요
며칠동안 검색하고 시도하다 도저히 안되어 질문을 올립니다

저사양 산업용 PC 환경(Geode LX 500MHz, 512RAM, 2GB 저장장치)에서
new로 대량의 메모리 할당을 하고 delete 를 하는 도중 killed가 발생하며 프로그램이 죽습니다
프로세스에서 killed가 발생하면서 죽는 현상을 찾아 본 결과
out of memory가 발생하여 oom killer가 제 프로세스를 kill하는 것이라고 하는데
new할 때 out of memory가 발생하는 상황에 out of memory가 발생하여 kill이 되었다면 이해가 갑니다만 메모리를 해제하는 도중에 왜 out of memory가 발생하는 것인지 이해가 가질 않습니다
이 상황에서 out of memory가 발생할 수 도 있는 것인가요?

또한 메모리를 delete를 하는 도중 프로세스가 killed가 발생하며 죽는 현상의 다른 원인을 알고 계시다면 조언 부탁드립니다

※ 해제를 시도하는 메모리는 다형성으로 구현된 클래스들을 동적할당하여 CMap에 add하였구요 이 CMap을 하나씩 iteration하면서 삭제합니다
※ oom-killer를 disable하기 위해 sysctl 옵션 변경 등의 인터넷에 나와있는 절차를 시도해보았는데 먹히지 않았습니다(제 리눅스 커널은 2.4.18-4 입니다)

도움 부탁드립니다
감사합니다

익명 사용자의 이미지

유효하지 않은 메모리를 delete 하는 경우 exception 이 뜨지 않나요?

heewon의 이미지

유효하지 않은 메모리를 delete하는 것은 아닙니다
같은 소스를 다른 PC에서 동작시켰을 때에는 몇번이고 new와 delete를 반복해도 문제가 없거든요

mirheekl의 이미지

일단, 다른 PC에서 문제가 없다고 해도 프로그램의 문제가 아니라고 단정할 수 없습니다.

단순히 메모리 반납만 하는 것이 아니고 자체적으로 소멸자와 연관된 메모리 작업 (최적화, 파편화제거 등)이 들어있는 게 아닐까요. 그렇다면 소멸자에서도 메모리 할당 요청->OOM 상황이 일어날 수 있습니다. 실제로 메모리가 부족하지 않다 하더라도 내부 계산 오류 등으로 엉뚱한 양의 메모리를 요청할 경우 OOM이 발생할 수 있겠고 말이죠.

OOM이 뜨는 바로 그 상황을 디버거로 확인해, 소멸자 내부의 어떤 단계에서 예외가 나오는지 파악하시는 게 좋을 듯 합니다.

--

jick의 이미지

"문제가 발생하지 않는" PC에서 valgrind를 이용해 돌려보시고 메모리를 잘못 쓰는 에러가 없나 확인해 보세요.

제법 높은 확률로 에러를 잡을 수 있습니다.

댓글 달기

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