무제한 코어 크기의 단점? 핵심 파일은 어디로 갑니까?


8

때때로 세그먼테이션 오류로 인해 충돌이 발생하는 시작 작업이 있으며 코어 덤프에 대한 몇 가지 질문이 있습니다.

먼저 스탠자를 추가해야합니다.

limit core unlimited unlimited

무제한 코어 크기를 허용하는 데 단점이 있습니까? 유한 한도가 더 좋을까요?

둘째, 핵심 파일은 어디로 갈까요? 기본값이 표준 또는 논리적 인 장소가 아닌 경우 다른 곳에 표시하려면 어떻게해야합니까?


시작 작업으로 우리를 업데이트 하시겠습니까?
Qasim

답변:


6

무제한 코어 덤프는 대부분의 상황에서 권장되지 않지만 기술적으로는 훌륭합니다. 코어 덤프에는 현재 프로세스에있는 "모든 메모리"만 있습니다. 따라서 최대 램 + 스왑만큼 클 수 있습니다. 잘하면 여유 공간이 더 많기를 바랍니다.

실제로는 총 램 + 스왑과 비교하여 "작은"이어야합니다.

"현재"디렉토리에 "파일"이 있어야합니다. chdir하지 않은 시작 작업의 경우 일반적으로 /입니다. 그들이 디렉토리를 변경하면 스스로를 찾아야합니다. 그러나 경로를 하드 코딩 할 수 있습니다.

/proc/sys/kernel/core_pattern"패턴" 을 확인할 수 있어야합니다 . 패턴을 다음과 같이 설정하면 echo "/var/log/core" > /proc/sys/kernel/core_pattern모든 코어가 / var / log에 있어야합니다.


5

코어 파일은 프로세스가 예기치 않게 종료 될 때 운영 체제가 작성하는 프로세스 이미지입니다. 코어 파일은 버그 또는 CPU 또는 메모리 보호 메커니즘의 위반으로 인해 프로그램이 잘못 작동 할 때 생성됩니다. 운영 체제가 프로그램을 종료하고 코어 파일을 작성합니다.

이 파일은 프로세스의 문제점을 판별하는 데 매우 유용 할 수 있습니다. 보유한 Linux의 배포 및 버전에 따라 기본적으로 코어 파일 제작을 활성화 할 수 있습니다.

코어 파일을 원하지 않으면 시작 파일에서 "ulimit -c 0"을 설정하십시오. 많은 시스템에서 이것이 기본값입니다. 에서 /etc/profile찾을 수 있습니다

잘린 파일은 실용적이지 않으므로 Linux 코어 파일의 크기를 "무제한"으로 설정하십시오.

Usage of ulimit         Action
ulimit -c               # check the current corefile limit
ulimit -c 0             # turn off corefiles
ulimit -c x             # set the maximum corefile size to x number of 1024bytes
ulimit -c unlimited     # turn on corefiles with unlimited size
ulimit -n unlimited     # allows an unlimited number of open file descriptors
ulimit -p               # size of pipes
ulimit -s               # maximum native stack size for a process
ulimit -u               # number of user processes
help ulimit             #list of other options

코어 파일은 프로세스의 현재 작업 디렉토리에 배치되며 JVM 프로세스에 대한 쓰기 권한 및 사용 가능한 디스크 공간이 적용됩니다.

커널 수준에 따라 유용한 커널 옵션을 사용하여 코어 파일에보다 의미있는 이름을 지정할 수 있습니다. 루트 사용자로서 sysctl -w kernel.core_users_pid = 1 옵션은 코어 파일의 이름이 "Core.PID"형식이되도록합니다.

ulimit -S -c 0 > /dev/null 2>&1

코어 파일을 원한다면 자신의 .bash_profile에서 재설정해야합니다.

ulimit -c 50000

코어 파일은 허용하지만 50,000 바이트로 제한합니다.

핵심 파일에 대한 더 많은 제어 권한이 있습니다. /proc/sys/kernel/

예를 들어 pid 태그를 제거하면

echo "0" > /proc/sys/kernel/core_uses_pid 

코어 파일은 "core"로 이름이 지정됩니다. 사람들은 코어 덤프를 생성하지 않으려는 디렉토리에 "core"라는 쓰기 불가능한 파일을 넣도록 선택할 수 있습니다. 디렉토리 (mkdir 코어) 또는 파일 (touch core; chmod 000 코어) 일 수 있습니다.

그러나 아마도 더 흥미로운 것은 당신이 할 수 있다는 것입니다.

mkdir /tmp/corefiles 
chmod 777 /tmp/corefiles 
echo "/tmp/corefiles/core" > /proc/sys/kernel/core_pattern 

그런 다음 모든 /tmp/corefiles코어 파일 이 던져집니다 (이 경우 core_uses_pid를 변경하지 마십시오).

간단한 스크립트로 이것을 테스트하십시오 :

# script that dumps core 
kill -s SIGSEGV $$ 

우분투에서 핵심 파일 생성은 파일을 통해 제어됩니다 /etc/default/collectd. 다음을 설정하여 코어 덤프 생성을 활성화 할 수 있습니다.

ENABLE_COREFILES=1

핵심 파일 찾기

데몬이 충돌하면 파일이 현재 작업 디렉토리에 생성됩니다. 기본적으로이입니다 pkglocalstatedir, 즉 prefix/var/lib/collectd. 패키지를 설치 한 경우이 디렉토리가 가장 가능성이 높습니다 /var/lib/collectd.

출처 : AP Lawrence 및 IBM

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.