코어 파일을 생성하지 않는 Linux에 대한 솔루션: 1. 코어 덤프 디렉토리가 있는지 확인하고 해당 디렉토리에 대한 쓰기 권한을 갖도록 프로세스를 설정합니다. 2. 서비스 프로그램이 seteuid()를 호출하는지 확인합니다. 3. 코어를 충분히 크게 설정합니다. 파일 크기 제한 4. 프로필 수정 등
이 기사의 운영 환경: linux5.9.8 시스템, Dell G3 컴퓨터.
Linux가 코어 파일을 생성하지 않으면 어떻게 해야 하나요? 코어 파일이 생성되지 않는 이유는 무엇입니까?
1. 코어 덤프가 저장된 디렉터리가 존재하고 프로세스에 해당 디렉터리에 대한 쓰기 권한이 있는지 확인하세요.
코어 덤프가 저장되는 디렉터리는 프로세스의 현재 디렉터리이며, 일반적으로 프로세스를 시작하기 위해 명령을 실행했을 때 프로세스가 있던 디렉터리입니다. 그러나 스크립트를 통해 시작되면 스크립트가 현재 디렉터리를 수정할 수 있습니다. 이 경우 프로세스의 실제 현재 디렉터리는 스크립트가 원래 실행된 디렉터리와 다릅니다. 이때 "/proc/
2. 프로그램이 프로세스의 유효 사용자 또는 그룹을 변경하기 위해 seteuid()/setegid()를 호출하면 시스템은 기본적으로 이러한 프로세스에 대한 코어 덤프를 생성하지 않습니다.
MySQL과 같은 많은 서비스 프로그램은 MySQL을 시작하기 위해 mysqld_safe를 실행하는 데 어떤 사용자를 사용하든 상관없이 mysqld의 유효 사용자는 항상 msyql 사용자입니다. 원래 사용자 A로 프로그램을 실행했지만 PS에 표시되는 프로그램 사용자가 B인 경우 이러한 프로세스는 seteuid를 호출한 것입니다. 이러한 프로세스를 활성화하여 Coredump를 생성하려면 (echo "1" > /proc/sys/kernel/suid_dumpable)이 필요합니다.
3. 다들 아시다시피 Core 파일 크기 제한을 충분히 크게 설정하기 위한 것입니다.
프로그램 충돌 시 생성되는 Core 파일의 크기는 프로그램 실행 시 차지하는 메모리 크기입니다. 그러나 프로그램이 충돌할 때의 동작은 정상적인 동작을 기반으로 예측할 수 없습니다. 예를 들어 버퍼 오버플로와 같은 오류로 인해 스택이 파괴될 수 있으므로 특정 변수의 값이 엉망으로 수정되는 경우가 많습니다. 프로그램은 이 크기를 사용하여 메모리를 적용합니다. 이로 인해 프로그램이 평소보다 더 많은 메모리를 차지할 수 있습니다. 따라서 프로그램이 정상 작동 중에 차지하는 메모리가 아무리 작더라도 Core 파일이 생성되고 크기 제한이 무제한으로 설정되어 있는지 확인하는 것이 좋습니다.
4. /etc/profile에
ulimit -c unlimited > /dev/null 2?&1
를 추가합니다. 5. 일반적으로 CLI에서 시작되는 프로그램의 경우
ulimit -c unlimited
로 설정하면 프로그램 외부에서 종료될 때 코어 덤프 파일을 생성할 수 있습니다. 그러나 데몬 모드에서 실행되는 프로그램의 경우 CLI로 시작된 프로그램과의 주요 차이점은
cwd(현재 작업 디렉터리)를 포함하는 프로세스의 실행 환경입니다. 예를 들어 상대 경로에서 코어 파일의 형식을 정의하는 경우 /proc/sys/kernel/core_pattern을 다음과 같이 정의합니다.
core-%e-%p-%t
일반적으로 데몬 파일의 cwd는 /이며 /proc/<를 전달할 수 있습니다. ;your_program_pid>/cwd 보려면 일반적으로 / 디렉터리에 연결합니다. 그리고 사용자에게 이 디렉터리에 대한 쓰기 권한이 없으면 코어 덤프 파일이 생성되지 않습니다.
가장 직접적인 해결책은 /proc/sys/kernel/core_pattern을 절대 경로인 /data/coredump/core-%e-%p-%t
로 수정하고 기본적으로 괜찮은지 확인하는 것입니다.
/proc/sys/kernel/core_pattern 파일의 코어 덤프 파일 형식을 다음과 같은 절대 경로로 수정하세요.
/data/coredump/core-%e-%p-%t
언제 코어 파일이 생성되지 않나요?
다음 조건에서는 코어 파일이 생성되지 않습니다.
(a) 프로세스는 set-user-ID이고 현재 사용자는 프로그램 파일의 소유자가 아닙니다.
(b) 프로세스는 다음과 같습니다. set-group-ID 및 현재 사용자 사용자는 프로그램 파일의 그룹 소유자가 아닙니다.
(c) 사용자는 현재 작업 디렉터리에 쓸 수 있는 권한이 없습니다.
(d) 파일이 너무 많습니다. 크기가 큰. 코어 파일의 권한(파일이 이전에 존재하지 않았다고 가정)은 일반적으로 사용자 읽기/쓰기, 그룹 읽기 및 기타 읽기입니다.
추천 학습: "linux 비디오 튜토리얼"
위 내용은 Linux가 코어 파일을 생성하지 않는 경우 수행할 작업의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!