메모리 부족에 대한 메모리 덤프를 만드는 방법.
시스템의 메모리가 부족하면 oom-killer는 몇 가지 계산을 통해 가장 높은 메모리를 차지하는 프로세스를 종료합니다.
종료된 프로세스의 코어 덤프를 어떻게 얻을 수 있나요?
답변1
커널이 코어 덤프를 생성하도록 구성되어 있더라도 OOM 킬러는 SIGKILL을 보내기 때문에 코어 덤프가 생성되지 않습니다.
에서 언급했듯이신호 매뉴얼 페이지(7), SIGKILL은 코어 덤프를 생성하지 않습니다.
따라서 이 동작을 변경하는 유일한 방법은 커널에 대한 사용자 정의 패치가 필요합니다.
답변2
Configured vm.panic_on_oom=2 in /etc/sysctl.conf, which solves my problem.
**
- 공황
**
메모리 부족 패닉 기능을 활성화하거나 비활성화합니다.
0으로 설정하면 커널은 oom_killer라는 일부 악성 프로세스를 종료합니다. 일반적으로 oom_killer는 악성 프로세스를 종료할 수 있으며 시스템은 살아남습니다.
이 값을 1로 설정하면 메모리 부족이 발생할 때 커널에 패닉이 발생합니다. 그러나 프로세스가 mempolicy/cpusets을 통해 노드 사용을 제한하고 해당 노드의 메모리가 소진되면 프로세스가 oom-killer에 의해 종료될 수 있습니다. 이 상황에서는 당황하지 않습니다. 다른 노드의 메모리가 비어 있을 수 있기 때문입니다. 이는 전체 시스템 상태가 아직 치명적이지 않을 수 있음을 의미합니다.
2로 설정하면 위의 상황이 발생하더라도 커널이 강제로 패닉을 발생시킵니다. 메모리 cgroup에서 oom이 발생하더라도 전체 시스템이 패닉 상태가 됩니다.
기본값은 0입니다. 1과 2는 클러스터 장애 조치에 사용됩니다. 장애 조치 전략에 따라 선택하세요. nic_on_oom=2+kdump는 oom이 발생하는 이유를 조사할 수 있는 매우 강력한 도구를 제공합니다. 스냅샷을 얻을 수 있습니다.