개발을 하다보면 프로세스가 아무 로그 없이 종료되는 경우가 많습니다. 원인은 정말 다양하지만 그 중 제가 가장 많이 경험한 케이스는 바로 OOM (Out of Memory) 입니다. 메모리가 부족해서 커널이 프로세스를 강제로 죽이는 거죠.

프로세스가 죽는 이유를 찾기 위한 긴 여정을 떠나기 전에 간단하게 OOM인지 아닌지 여부를 확인할 수 있는 명령어를 소개합니다.

1
sudo dmesg -T | grep -i -E 'oom|kill'
  • dmesg-T 옵션은 시스템 업타임 시간이 아닌 사람이 읽을 수 있는 시간으로 변환해주는 옵션입니다.
  • grep-i 옵션은 대소문자를 구분하지 않고 검색하는 옵션입니다. kill, Kill, KILL에 관계없이 모두 검색할 수 있습니다.
  • grep-E 옵션은 정규표현식을 사용할 수 있는 옵션입니다. 이 옵션을 사용하면 | 기호를 이용하여 여러개 키워드를 한번에 검색할 수 있습니다.

이 명령어를 사용했을 때 아래와 같이 로그가 발견되고, 로그가 발생한 시점이 돌고있던 프로세스가 사라진 시점과 비슷하다면 OOM이 발생한 것입니다. 축하드립니다! 프로세스가 사라진 원인을 찾으셨습니다. 이제 OOM의 원인을 찾아서 해결하기만 하면 됩니다.