충돌이 발생하고 인쇄되는 앱이 있습니다 Aborted (core dumped)
.
이제 바이너리가 포함된 디렉터리를 살펴보면 크래시 덤프가 없습니다.
- 디렉토리 가 없습니다
core
. - 파일 시스템에 여유 공간이 있습니다
- 사용자는 디렉터리에 파일을 만들 수 있습니다.
ulimit -a
인쇄
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 31845
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65536
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 31845
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
cat /proc/sys/kernel/core_pattern
인쇄
core
cat /proc/sys/fs/suid_dumpable
인쇄
2
그 밖에 확인할 수 있는 것이 있나요? 아이디어가 부족해요.
우분투 15.04에서 실행 중입니다.
답변1
일부 운영 체제에서는 코어 파일을 배치하기 위해 시스템 전체 디렉터리를 구성할 수 있습니다.
프로그램이 작업 디렉터리를 변경했을 수 있습니다. 코어 파일은 코어를 덤프한 프로그램의 작업 디렉터리에 있습니다.
ulimit -c 0이 실행되면 운영 체제 오류가 없는 한 쉘 메시지에 "core dumped"가 인쇄되지 않아야 합니다.
답변2
Linux에서 코어 덤프를 생성하려면 실행 파일을 실행하는 init 스크립트에 다음 매개변수를 추가할 수 있습니다. 따라서 소프트웨어를 초기화하거나 애플리케이션을 실행하고 환경 변수를 내보낼 때마다 다음 줄을 스크립트에 복사하고 충돌이 발생할 경우를 대비해 코어를 덤프할 수 있습니다.
코어 덤프 위치를 설정하려면 proc 파일 시스템을 사용하여 코어 파일 경로를 설정할 수 있습니다.
/tmp/crash/corefiles
이렇게 하면 스크립트를 사용하여 실행되는 프로세스에 대해 핵심 파일 빌드 경로가 그대로 유지됩니다 .
mkdir -p /tmp/crash/corefiles
chmod 775 /tmp/crash/corefiles
echo "/tmp/crash/corefiles/%e.%s.core" > /proc/sys/kernel/core_pattern
여기서 변수는 다음과 같습니다.
%이자형파일 이름입니다
%G프로세스가 실행 중일 때의 gid입니다.
%피프로세스의 pid입니다
%에스덤프를 유발하는 신호입니다.
%티덤프가 발생하는 시간입니다.
%유실행 중인 프로세스의 uid입니다.
또한 코어 파일 크기를 설정해야 합니다. 다음 명령은 코어 파일 크기를 무제한으로 설정합니다.
ulimit -c unlimited
이제 프로세스의 각 스레드에서 설정한 코어 파일 크기를 확인하려면 다음을 사용할 수 있습니다.
cat /proc/<PID>/limits
위 명령의 출력:
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size unlimited unlimited bytes
Max open files 10000 10000 files
Max address space unlimited unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 31868 31868 processes
Max locked memory 65536 65536 bytes
Max file locks unlimited unlimited locks
Max pending signals 31868 31868 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
위 출력에서 최대 코어 파일 크기가 무제한으로 설정되어 있음을 알 수 있습니다.
귀하의 경우에는 아래 단계를 따르십시오.
- 위의 코어 파일 생성과 관련된 모든 환경 내보내기 및 변경 사항을 포함하는 init 스크립트를 만듭니다.
- init 스크립트에서 애플리케이션을 트리거합니다.
- 충돌이 발생하면 설정한 코어 파일 위치를 기반으로 코어 파일을 볼 수 있어야 합니다.
- 다음 명령을 사용하여 core_pattern을 확인
cat /proc/sys/kernel/core_pattern
하고 위치 설정이 올바른지 확인할 수 있습니다.