모든 시스템은 기본 목표를 달성하기 위해 실행 프로세스가 필요합니다. 그러나 때로는 일이 잘못되어 프로세스가 중단 될 수 있습니다. 시스템의 구성에 따라 코어 덤프가 만들어집니다. 즉,충돌된 프로세스의 메모리 스냅숏이 저장됩니다. 용어 코어는 실제로 오래된 시스템의 오래된 자기 코어 메모리를 나타냅니다. 이 유형의 메모리는 더 이상 사용되지 않지만 우리는 여전히 리눅스 시스템에서이 용어를 사용합니다. 역사에 대한 충분한,의 제대로 코어 덤프를 처리하기 위해 우리의 리눅스 시스템을 구성 할 수 있습니다.
목차
리눅스 및 코어 덤프
대부분의 리눅스 시스템에는 기본적으로 코어 덤프가 활성화되어 있습니다. 언제나처럼,여기에 만들 수있는 트레이드 오프가있다. 한편,우리는 향상된 안정성과 문제 해결을 위해 데이터를 수집 할 수 있습니다. 다른 한편으로,우리는 디버그 데이터를 제한 하 고 중요 한 데이터 유출을 방지 하려는.
첫 번째 옵션은 개발자의 워크스테이션과 같이 불안정한 프로그램을 조사해야 하는 시스템에 적합합니다. 두 번째 옵션은 중요한 데이터를 저장하거나 처리하는 프로덕션 시스템에 더 적합합니다.
코어 덤프 비활성화
모든 시스템에 대해 기본적으로 리눅스에서 코어 덤프를 비활성화하는 것이 좋습니다. 파일이 디스크 공간을 차지하고 중요한 데이터를 포함 할 수 있기 때문입니다. 따라서 문제 해결을 위해 코어 덤프가 필요하지 않은 경우 비활성화하는 것이 안전한 옵션입니다.
옵션 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
이 경우 충돌이 어 포트 유틸리티에 파이프됩니다. 즉,충돌은 아포 트에 의해 분석 될 것입니다. 일반적으로 충돌은/바르/충돌에서 발견되지만,또한 다른 리눅스 배포판에/바르/스풀 또는/바/라이브러리/시스템/코어 덤프에있을 수 있습니다.이 문제를 해결하기 위해,이 문제를 해결하는 데 도움이 될 것입니다.
이 모든 설정을 확인한 후에는 멋진 코어 덤프를 만들 수 있어야합니다.
결론
코어 덤프는 문제 해결에 유용 할 수 있지만 중요한 데이터가 유출되면 재해가 발생할 수 있습니다. 가능한 경우 코어 덤프를 비활성화하고 실제로 필요할 때만 활성화하십시오. 파일이 안전하게 저장되어있는 경우 이러한 경우 검사에서,그래서 일반 사용자는 데이터를 볼 수 없습니다. 그리고 당신이 선택한 것과 독립적으로,항상 당신의 구성이 작동 할 것으로 예상하는대로 정확하게 작동하는지 테스트하십시오.