2010-05-04 1 views
7

최근 응용 프로그램에서 생성 된 코어 덤프의 크기가 증가하고 있음을 알게되었습니다. 처음에는 크기가 약 5MB 였고 스택 프레임이 약 5 개였습니다. 이제는 2GB가 넘는 코어 덤프가 있으며 그 안에 들어있는 정보는 더 작은 덤프와 다를 바 없습니다.Linux 코어 덤프가 너무 큽니다!

생성 된 코어 덤프의 크기를 제어 할 수있는 방법이 있습니까? 응용 프로그램 바이너리 자체보다 작아야합니까?

바이너리는 이런 방식으로 컴파일 :

디버그 기호 릴리스 모드에서 컴파일
  • (즉, GCC의 -g 컴파일러 옵션).
  • 디버그 기호는
    별도의 파일에 복사되고
    바이너리에서 제거됩니다.
  • GNU 디버그 심볼 링크가 이진 파일에 으로 추가되었습니다.

코어 한계를 무한대로 설정하는 setrlimit에 대한 호출이 있습니다. 이것이 문제입니까?

+1

앱 부리 수유를 중지합니다. – Pierreten

답변

1

예, setrlimit은 큰 코어 파일을 가져 오는 이유입니다. 대부분의 쉘에서 코어 크기에 대한 제한을 설정할 수 있습니다. bash에서 ulimit -c 5000000을 할 수 있습니다. 그러나 당신의 setrlimit 호출은 그것을 무시할 것입니다.

/etc/security/limits.conf를 사용하여 코어 크기의 상한을 설정할 수도 있습니다.

+2

나는이 대답이 잘못된 것이라고 생각한다. setrlimit은 코어 덤프가 잘리는 지 확인한다. 코어 덤프는 응용 프로그램이 할당하거나 매핑 한 메모리로 인한 크기입니다. – Peter

11

예 - 코드를 포함하여 코어 덤프가 응용 프로그램의 주소 공간의 전체 이미지를 포함

:-) 너무 많은 메모리를 할당 (등 malloc이 객체) 스택 및 힙하지 않는

코어 덤프가> 2GB 이상이면 어떤 시점에서 그만큼 많은 메모리를 할당했음을 의미합니다.

setrlimit을 사용하여 코어 덤프 크기의 하한값을 설정할 수 있습니다. 코어 덤프가 완료 될 위험이 있으므로 (불완전하기 때문에) 디코딩 할 수 없습니다.

+2

'mmap'으로 매핑 된 큰 파일이있는 동안 앱이 충돌하는 경우 덤프에 포함 된 파일도 가져올 수 있습니다. – caf