OOM Killer가 프로세스를 종료하면 스크립트가 트리거됩니다.

OOM Killer가 프로세스를 종료하면 스크립트가 트리거됩니다.

저는 클라우드에서 많은 작업을 수행하며 일반적으로 Ubuntu 18.04를 사용하여 메모리 집약적인 통계 모델을 실행합니다. 저에게 있어서 가장 큰 골칫거리는 모델을 몇 시간 또는 밤새 실행하도록 설정했는데 나중에 확인해보니 프로세스가 종료된 것을 발견할 때입니다. 몇 가지 조사 결과, 이는 메모리 부족(OOM) 킬러 때문인 것으로 보입니다.

아무 것도 실행하지 않는 클라우드 VM을 구입하는 데 밤새도록 시간을 낭비하지 않도록 OOM Killer가 내 프로세스 중 하나를 언제 종료하는지 알고 싶습니다.

OOM 이벤트가 기록되는 것 같아서 /var/log/주기적으로 .NET에서 새 메시지를 찾는 cron 작업을 작성할 수 있다고 생각했습니다 /var/log/. 하지만 이건 패치워크인 것 같습니다. OOM Killer가 프로세스를 종료한 후 나에게 알림을 보내도록 구성할 수 있는 쉘 스크립트를 실행하도록 설정할 수 있는 방법이 있습니까?

답변1

oom에서 커널 패닉을 만들 수 있습니다.

sysctl vm.panic_on_oom=1

또는 향후 재부팅을 위해

echo "vm.panic_on_oom=1" >> /etc/sysctl.conf

프로세스가 종료될 가능성을 조정할 수 있지만 이는 이미 대부분을 삭제했다고 가정하므로 유용하지 않을 수 있습니다. 을 참조하세요 .man 5 proc/proc/[pid]/oom_score_adj

물론 프로그램의 종료 코드를 테스트할 수도 있습니다. 137이면 oom이 할 수 있는 SIGKILL에 의해 종료됩니다.

사용하는 경우 rsyslogd데이터 스트림의 oom 메시지를 일치시키고(어떤 모양인지는 모르겠습니다) 프로그램을 실행할 수 있습니다.

:msg, contains, "oom killer..." ^/bin/myprogram

관련 정보