저는 클라우드에서 많은 작업을 수행하며 일반적으로 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