*** glibc detected *** double free or corruption (!prev): 0x09f1ab80 ***

by ADMINPLAY posted May 03, 2010
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
APACHE 에러로그에 아래와 같은 메세지가 출력되면서....아파치는 기하급수적으로 CPU를 점유하고 있었으며 로드는...500을상회하면서 시스템이 먹통이 되는 현상이 발생했다...

[Wed Feb  3 21:24:45 2010] [notice] child pid 21395 exit signal Aborted (6)
*** glibc detected *** double free or corruption (!prev): 0x09e4b620 ***
[Wed Feb  3 21:26:31 2010] [notice] child pid 20723 exit signal Aborted (6)
*** glibc detected *** double free or corruption (!prev): 0x09f1ab80 ***
[Wed Feb  3 21:26:36 2010] [notice] child pid 1315 exit signal Aborted (6)


glibc의 추가된 기능중에 코드의 무결성 체크를 하는 기능
  • Red Hat 엔터프라이즈 리눅스 4에 포함된 버전 glibc는 데이터 손상을 최대할 빨리 검색하여 방지할 수 있도록 내부 정상 감시 기능을 추가로 수행합니다. 데이터 손상이 감지되면 다음과 같은 메시지가 표준 오류로 나타날 것입니다 (만일 표준 오류(stderr)이 열려있지 않은 경우에는 syslog으로 기록됩니다):

    *** glibc detected *** double free or corruption: 0x0937d008 ***

    이 오류 메시지를 생성하는 프로그램은 디폴트로 제거(kill)됩니다; MALLOC_CHECK_ 환경 변수를 이용하여 오류 메시지 생성 여부를 선택하실 수 있습니다. 다음과 같은 설정이 가능합니다:

    • 0 ? 오류 메시지를 생성하지 않고, 프로그램을 제거하지 않음

    • 1 ? 오류 메시지를 생성하지만, 프로그램을 제거하지 않음

    • 2 ? 오류 메시지를 생성하지는 않지만, 프로그램은 제거함

    • 3 ? 오류 메시지를 생성하고 프로그램을 제거함

    • 알림

      만일 MALLOC_CHECK_ 변수를 0이 아닌 다른 값으로 설정할 경우, glibc는 기본 설정 보다 광범위한 검사를 수행하므로결국 시스템 성능에 영향을 미칠 수 있습니다.

      만일 제삼자 ISV의 프로그램로 인해 이러한 데이터 손상 검사가 수행되고 오류 메시지가 나타난다면, 심각한 문제일 수 있으니 어플리케이션의 제조업체에 보고하시기 바랍니다.



      ■ 해결책

       1. 환경변수(environment variable) 설정
           export MALLOC_CHECK_=0

           참조: http://www.jp.redhat.com/support/manuals/RHEL4_RELEASE-NOTES-ja.html

      2. 코드에서 double free가 있거나 double malloc이 있는 경우에 발생합니다. glibc 버전 업이 진행되면서 새로 추가된 기능 중 하나지요. 메모리 보호를 위한 조치랄까요. 일단 malloc_check 을 하지 않게 함으로써 메세지 발생은 막습니다만, 그것으로 문제가 해결된 것은 아닙니다.

       

TAG •