시스템

[우분투]도커 메모리 오류 Out of Memory 확인방법

@developer.kye 2021. 11. 26. 16:44

도커에서 돌고 있던 java 프로세스가 Out of Memory로 강제 kill 당했다. 

현상은 작동되던 프로세스가 정상작동이 안되는 것인데, 이것이 OOM(out of memory) 에러인지 확인해보기 위해서는 다음과같이 확인하면 된다.

 

1. syslog 를 확인한다.

우분투 /var/log 의 syslog를 확인한다.

 

아래 내용을 보면 oom-kill 로 문제 프로세스가 kill당하고,

그 프로세스를 담고 있던 도커 컨테이너가 delete 되는 것을 확인할 수 있다.

oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=d20ddfa000acb059135d0036dd8f34a1e2f9c2579cf24032a372e704598c4f19,mems_allowed=0,global_oom,task_memcg=/docker/d20ddfa000acb059135d0036dd8f34a1e2f9c2579cf24032a372e704598c4f19,task=java,pid=1069553,uid=0
[9856994.554801] Out of memory: Killed process 1069553 (java) total-vm:19163036kB, anon-rss:14791720kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:30056kB oom_score_adj:0
[9856995.217124] oom_reaper: reaped process 1069553 (java), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB
dockerd[2767]: time="2021-11-26T05:18:37.165264329Z" level=info msg="ignoring event" container=d20ddfa000acb059135d0036dd8f34a1e2f9c2579cf24032a372e704598c4f19 module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"

 

2. docker stats 명령어로 메모리 상태를 확인한다.

$ sudo docker stats
CONTAINER ID   NAME           CPU %     MEM USAGE / LIMIT     MEM %     NET I/O   BLOCK I/O        PIDS
123473e03cfc   kye-process    0.83%     4.919GiB / 15.46GiB   31.83%    0B / 0B   162MB / 111MB    189
321da21dd82c   nginx          0.00%     13.06MiB / 15.46GiB   0.08%     0B / 0B   167MB / 16.4kB   2

 

언제 메모리가 증가하고 해제가 안되는지 모니터링한다.