모든 시스템은 기본 목표를 달성하기 위해 실행 프로세스가 필요합니다. 그러나 때로는 일이 잘못되어 프로세스가 중단 될 수 있습니다. 시스템의 구성에 따라 코어 덤프가 만들어집니다. 즉,충돌된 프로세스의 메모리 스냅숏이 저장됩니다. 용어 코어는 실제로 오래된 시스템의 오래된 자기 코어 메모리를 나타냅니다. 이 유형의 메모리는 더 이상 사용되지 않지만 우리는 여전히 리눅스 시스템에서이 용어를 사용합니다. 역사에 대한 충분한,의 제대로 코어 덤프를 처리하기 위해 우리의 리눅스 시스템을 구성 할 수 있습니다.
목차
리눅스 및 코어 덤프
대부분의 리눅스 시스템에는 기본적으로 코어 덤프가 활성화되어 있습니다. 언제나처럼,여기에 만들 수있는 트레이드 오프가있다. 한편,우리는 향상된 안정성과 문제 해결을 위해 데이터를 수집 할 수 있습니다. 다른 한편으로,우리는 디버그 데이터를 제한 하 고 중요 한 데이터 유출을 방지 하려는.
첫 번째 옵션은 개발자의 워크스테이션과 같이 불안정한 프로그램을 조사해야 하는 시스템에 적합합니다. 두 번째 옵션은 중요한 데이터를 저장하거나 처리하는 프로덕션 시스템에 더 적합합니다.
코어 덤프 비활성화
모든 시스템에 대해 기본적으로 리눅스에서 코어 덤프를 비활성화하는 것이 좋습니다. 파일이 디스크 공간을 차지하고 중요한 데이터를 포함 할 수 있기 때문입니다. 따라서 문제 해결을 위해 코어 덤프가 필요하지 않은 경우 비활성화하는 것이 안전한 옵션입니다.
옵션 1:구성 파일
를 통해 코어 덤프를 비활성화하려면ulimit
값을 설정해야합니다. 이 작업은/등/보안/제한을 통해 수행됩니다.일부 쉘 특정 제한을 정의합니다.
알고 좋은 소프트 및 하드 제한이 있다는 것입니다. 하드 제한은 재정의할 수 없는 것이지만 소프트 제한은 특정 사용자에게만 적용될 수 있습니다. 프로세스가 코어 덤프를 만들 수 없도록 하려면 둘 다 0 으로 설정할 수 있습니다. 부울(0=거짓,1=참)처럼 보일 수 있지만 실제로 허용되는 크기를 나타냅니다.
* 소프트 코어 0
*하드 코어 0
별표 기호는 모든 사용자에게 적용된다는 의미입니다. 두 번째 열은 하드 또는 소프트 제한을 사용하려는 경우 설정 및 값을 나타내는 열 다음에 나타납니다.옵션 2:프로필을 통해 울리미트 구성
울리미트의 값은/등/프로필 또는/등/프로필의 사용자 지정 파일을 통해 설정할 수도 있습니다.디 디렉토리. 이 사용할 수있는 경우 후자는 바람직하다. 예를 들어,/라는 이름의 파일을 만들어 etc/profile.d/disable-coredumps.sh.
2018 년 10 월 15 일(토)~2018 년 10 월 15 일(일)2>&1″ > /기타/프로필.디/비활성화-코어 덤프.이 명령은 새 파일에 설정을 추가하고 소프트 및 하드 제한을 모두 0 으로 설정합니다. 각 사용자는 로그인 할 때이 값을 가져옵니다.
울리밋 설정 외에도 고려해야 할 커널 설정도 있습니다. 따라서 옵션 중 하나를 선택하는 것이 첫 번째 단계입니다.이 경우,이 서비스를 사용하는 경우,이 서비스를 사용하지 않도록 설정할 수 있습니다.파일. 이 파일은 가장 가능성이 높습니다.디/50-코어 덤프.콘프 시스템 파일 세트를 가지고 있기 때문에,같은 다른 사람을 확인하기 위해 확인:
저장소 설정을’없음’으로 설정합니다. 그런 다음 최대 크기를 0 으로 제한하도록 프로세스 크기를 구성하십시오.
스토리지=없음
프로세스 크기 최대=0일반적으로 시스템 구성을 다시 로드하는 것으로 충분합니다.
systemctl daemon-reload
그래도 코어 덤프가 생성되면 시스템을 재부팅하십시오.
사용 안 함 설정 프로세스 메모리 덤프
상승 된 권한(또는 설정 비트)이 있는 프로세스는 다른 설정에 따라 여전히 코어 덤프를 수행 할 수 있습니다. 이러한 프로세스는 일반적으로 더 많은 액세스 권한을 가지므로 메모리에 더 중요한 데이터 세그먼트를 포함 할 수 있습니다. 이것 또한 바꿀 시간입니다. 이 동작은 시스템 키를 사용하여 또는 직접 파일 시스템을 통해 변경할 수 있습니다. 영구 설정의 경우 일반적으로 시스템 명령 및 구성이 사용됩니다. 설정을’키’라고 하며,이 설정에 연결된 관련 값(키-값 쌍이라고도 함)이 있습니다.
0 으로 덤핑 할 수 있습니다.
echo "fs.suid_dumpable=0" >> /etc/sysctl.conf
변경 내용을 활성화하려면 다음을 수행합니다.
sysctl -p
그냥 영구적 인 변경하지 않고 테스트 할? 키=값 뒤에
sysctl -w
를 사용합니다.팁:시스템을 조정 하 고 리눅스 커널을 강화 하는 좋은 방법입니다.
코어 덤프 사용
코어 덤프를 허용하는 주된 이유는 문제 해결을 위한 것입니다. 프로세스의 덤프 된 메모리는 일반적으로 숙련 된 개발자가 문제를 디버깅하는 데 사용할 수 있습니다. 소프트웨어 공급 업체는 코어 덤프를 사용하도록 요청할 수 있습니다. 일반적으로 프로세스가 처음에 추락 이유를 발견하고 그 원인이 관련 루틴을 찾을 수 있습니다.
리눅스에서 코어 덤프를 활성화하는 것은 몇 가지 구체적인 세부 사항을 구성해야한다는 점을 제외하고는 코어 덤프를 비활성화하는 것과 유사합니다. 예를 들어 특정 프로그램의 세부 정보 만 필요한 경우 소프트 제한을 사용할 수 있습니다. 이 작업은 소프트 제한임을 나타내는
-S
를 사용하여 수행됩니다.-c
은 코어 덤프의 크기를 나타냅니다.
ulimit -S -c 0
다음 단계는’내 프로그램 대 문제 해결’이 코어 덤프를 만들 수 있도록하는 것입니다.
ulimit -S -c unlimited my-program-to-troubleshoot
모든 프로세스에서 코어 덤프를 사용할 수 있도록 하려면 프로그램 없이 위의 줄을 사용하거나/등/보안/제한에서 시스템 제한을 설정합니다.콘프
* 소프트 코어 무제한
문제 해결 설정 바이너리
설정 비트가 설정된 이진 파일은 루트 권한으로 실행할 수 있습니다. 이 특별한 유형의 액세스는 가능한 한 많이 제한되어야합니다. 또한 코어 덤프의 생성을 위해,그것은 제대로 구성 할 필요가있다. 이 도구는
감염을 교체하고 또한 컴퓨터가 더 빨리 만들 수 있습니다.키를 다시로드하십시오.
- 0 – 사용 안 함
- 1-사용 안 함
- 2–사용 안 함
1 또는 2 로 덤핑 할 수 있습니다. 이를 2 로 설정하면 코어 덤프가 루트 사용자 만 읽을 수 있기 때문에 선호됩니다. 이는 민감한 데이터가 있는 시스템에 대한 좋은 대안입니다. 옵션을 1 로 설정하면 개인 개발 시스템에 더 적합합니다.
일반 덤프 파일 만들기
리눅스 시스템의 가장 큰 미스테리 중 하나는 코어 덤프가 있는 곳입니다. 리눅스는 코어 덤프를 캡처 할 수있는 트릭을 가지고있다. 이 특정 설정은 시스템 커널을 통해 수행됩니다.이 문제를 해결하려면 다음을 수행하십시오. 대부분의 시스템에는 이 설정에 파이프(
|
)가 있어 프로그램이 생성된 데이터를 처리해야 함을 나타냅니다. 그래서 코어 덤프가 어디로 가는지 궁금하다면 파이프를 따라 가십시오!우분투 시스템의 코어 덤프는 일반적으로 사용됩니다. 시스템 익스플로러는 저희의 데이터베이스를 통해 실행 중인 프로세스를 검사할 수 있는 쉬운 방법을 제공하는 최고의 프리웨어입니다.
해당 파일에”코어”를 울려 이 설정을 임시로 변경하거나
sysctl
유틸리티를 사용할 수 있습니다.
sysctl -w kernel.core_pattern=core
중요한 점은 이러한 변경으로 충분하지 않을 수 있다는 것입니다. 그것은 또한 당신의 자유에 달려 있습니다.덤프할 수 있는 설정입니다. 이 경우 경고가 커널 로거에 기록됩니다.이 문제를 해결하는 데 도움이되는 몇 가지 방법이 있습니다. 파이프 처리기 또는 정규화된 코어 덤프 경로가 필요합니다.
필요할 때 코어패턴을 전체 경로로 설정하고,선택적으로 실행 중인 사람,피디 등을 정의하는 변수를 설정합니다.
코어는 다음과 같습니다.이 예제에서는 덤프에 사용자 아이디,프로그램 이름 및 프로세스 아이디가 포함됩니다.
시스템 코어 덤프
최신 리눅스 배포판을 사용할 때는 시스템 코어가 활성화되어 있을 가능성이 큽니다. 설정을 재정의해야 할 수도 있습니다.디/50-코어 덤프.코어 덤프를 저장하는 방법 및 위치를 정의하고 정의하십시오.이 경우 커널을 사용하는 것이 좋습니다.이 예제에서는 다음과 같이 사용할 수 있습니다. 코어 덤프가 저장되는 기본 경로는 다음과 같습니다.
구성 테스트
대부분의 다른 자습서에서는 구성할 설정을 제공합니다. 그러나 예상대로 일을 어떻게 알 수 있습니까? 당신은 그것을 테스트해야합니다!
코어 덤프 만들기
옵션 1:불안정한 프로그램 만들기
간단한 프로그램을 만들어 보겠습니다. 주요 목표는 실행될 때 충돌 한 다음 선택적으로 코어 덤프를 만드는 것입니다. 시스템에 설치 하 고 파일 충돌을 만듭니다.홈 디렉토리에.
int main(){ return 1/0;}이 프로그램은 주요 기능을 시작하고 정수 값(숫자)을 반환합니다. 그러나 1 을 0 으로 나누면 허용되지 않으며 충돌이 발생합니다. 다음 단계는 우리의 작은 버그 프로그램을 컴파일하는 것입니다.
![]()
우리의 불안정한 작은 프로그램
심지어 컴파일러는 우리의 프로그램이 심각한 문제를 포함하고 그것에 대해 경고를 표시 보여줍니다. 이제 그것을 실행 하 고이 경우 참조 하자.
![]()
좋은 충돌!
이 한 줄에서 실제로 몇 가지를 배울 수 있습니다. 특히 부동 소수점을 참조,예외로 종료하는 것이 우선. 이 프로그램의 진수 형식입니다,그래서 어떤 수학을하는 동안 뭔가 일이 있음을 나타낼 수 있습니다. 또 다른 결론은 코어가 끝에(코어 덤프)추가로 인해 덤프된다는 것입니다. 코어 덤프가 비활성화 된 경우,이 나타나지 않을 것입니다.
좋아요,그래서 위의 충돌로 우리는 이제 덤프 된 파일을 가지고 있습니다. 정확히. 리눅스 배포판에 따라 상황이 보이는 것처럼 간단하지 않을 수 있습니다. 각 배포판은 코어 덤프 및 기본 설정을 다르게 처리합니다. 가장 최근의 리눅스 배포판도 이제 시스템을 사용하고 규칙이 약간 변경되었습니다. 구성에 따라 코어 덤프를 검색해야 할 수도 있습니다. 그래서 여기에 모든 것을 보장하기 위해 몇 가지 팁이 올바르게 구성되어 있습니다.
옵션 2:실행 중인 프로세스 종료
테스트 프로그램을 사용하는 대신 기존 프로세스를 종료할 수도 있습니다. 이는 세그멘테이션 위반에 대한 간략한 설명이며 세그멘테이션 오류라고도 합니다.
kill -s SIGSEGV PID
현재 프로그램(대부분 쉘)이 충돌합니다. 과학에 대한 모든 것,맞죠?
옵션 3:gdb 를 사용하
있는 경우에 개발자 도구는 디버깅 gdb 를 설치했다면,프로세스에 연결하의 선택을 사용하여 프로세스 ID(PID).
gdb -p 1234
그 후,해당 명령어를 호출하여 코어 덤프를 생성한다. 이 명령을 사용한 후에는 출력을 반환해야합니다.
저장된 코어 파일 코어.1234
울리미트 설정 확인
울리미트 설정은 프로그램이 충돌할 때 발생할 수 있는 일을 정의합니다. 따라서 루트 및 일반 권한이없는 사용자 모두에 대해 먼저이를 확인하는 것이 안전합니다.
코어 덤프의 하드 한도 확인:
ulimit -H -c
소프트 한도 확인:
ulimit -S -c
코어 패턴 확인
/프로세스 파일 시스템을 사용하여 테스트 중에 값을 수집하고 임시로 변경합니다. 커널을 쿼리합니다.코어패턴 키.
cat /proc/sys/kernel/core_pattern
그것은 다음과 같은 것을 보여줄 수 있습니다:
|/usr/share/apport/apport %p %s %c %P
이 경우 충돌이 어 포트 유틸리티에 파이프됩니다. 즉,충돌은 아포 트에 의해 분석 될 것입니다. 일반적으로 충돌은/바르/충돌에서 발견되지만,또한 다른 리눅스 배포판에/바르/스풀 또는/바/라이브러리/시스템/코어 덤프에있을 수 있습니다.이 문제를 해결하기 위해,이 문제를 해결하는 데 도움이 될 것입니다.
이 모든 설정을 확인한 후에는 멋진 코어 덤프를 만들 수 있어야합니다.
결론
코어 덤프는 문제 해결에 유용 할 수 있지만 중요한 데이터가 유출되면 재해가 발생할 수 있습니다. 가능한 경우 코어 덤프를 비활성화하고 실제로 필요할 때만 활성화하십시오. 파일이 안전하게 저장되어있는 경우 이러한 경우 검사에서,그래서 일반 사용자는 데이터를 볼 수 없습니다. 그리고 당신이 선택한 것과 독립적으로,항상 당신의 구성이 작동 할 것으로 예상하는대로 정확하게 작동하는지 테스트하십시오.