본문 바로가기
시스템

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

by @developer.kye 2021. 11. 26.

도커에서 돌고 있던 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

 

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