Docker WSL2에서 gitlab 컨테이너 사용 중 dev shm 용량 문제 발생

Docker WSL2에서 gitlab 컨테이너 사용 중 dev shm 용량 문제 발생

Docker/WSL2, GitLab Container

내 OS는 Windows 11 22H2이다. 윈도우 10 시절부터 Docker for Windows를 사용해왔고, WSL2가 나왔을 때 굉장한 성능 향상에 반해 바로 Hyper-V 기반에서 WSL2 기반으로 갈아탄 뒤 지금까지 쭉 써오고 있다.

GitLab 컨테이너는 GitLab을 직접 호스트할 수 있게 해주는 컨테이너이다. 깃랩은 깃헙처럼 자체 웹 사이트도 존재하지만 필요한 사람은 Self-hosted 인스턴스를 구축해 사용할 수 있는데, 리눅스에 직접 설치할 수도 있고 도커에 설치할 수도 있다. 나는 WSL에 직접 설치하려 했었으나 여러 이유로 실패하고1, 잠깐 다녔던 회사의 방식처럼 NAS를 하나 구비해서 쓸까 하다가 돈 낭비라는 생각이 들어 최종적으로 도커 컨테이너 방식에 안착했다.

로그 스팸, 접속 불안정

그렇게 몇 년간 잘 쓰다가 며칠 전 부터 갑자기 때때로 내 깃랩 사이트에 접속할 수 없는 문제가 발생했다. 특이 사항으로는 처음 하룻동안은 아예 예고없이 Docker for Windows 자체가 크래시됐었다.2
위 문제를 해결하는 과정에서 깃랩 컨테이너 뿐 아니라 Docker for Windows 자체를 재시작했고, 이 때문인지 그 날은 문제 없이 잘 사용했다.

엄청나게 많은 WARN/DEBUG 로그 스팸

그러던 중 오늘 다시 비슷한 증상이 발생했다. 이번엔 Docker for Windows가 꺼지거나 하진 않았으나, 사이트에 여러 문제가 발생했다. 일단 어떤 페이지이든지 한 번에 들어가지는 법이 없었다. 응답이 느린 것은 아니지만, 500 에러나 422 에러 등 여러 에러 페이지가 반복해서 출력되었고, 혹시나 하는 마음에 Push/Pull을 해봤으나 역시나 5번 시도해야 한 번 성공할까 말까 하는 수준이었다.

뭔가 문제가 있다고 생각한 나는 컨테이너 로그를 확인했는데, 다음과 같은 로그가 미친듯이, 정말 말 그대로 미친듯이 올라가고 있었다.

2023-07-10 14:07:02 gitlab | {"severity":"WARN","time":"2023-07-10T05:07:02.697Z","correlation_id":"01H4Z34AWW10GHW0S99F9ZVAD4","message":"writing value to /dev/shm/gitlab/puma/histogram_puma_master-0.db failed with unmapped file"}

2023-07-10 14:07:02 gitlab | {"severity":"DEBUG","time":"2023-07-10T05:07:02.698Z","correlation_id":"01H4Z34AWW10GHW0S99F9ZVAD4","message":"/opt/gitlab/embedded/lib/ruby/gems/3.0.0/gems/prometheus-client-mmap-0.25.0-x86_64-linux/lib/prometheus/client/mmaped_dict.rb:46:in ...
...
...
(약 12KB)

위와 같은 비슷한 로그들이 초당 200번씩 반복3되고 있었다.

내가 해결한 방법

일단 해결 방법을 말하기에 앞서, 다시 한 번 이전 포스트에서 강조한 내용을 또다시 강조하겠다. 공식 문서를 꼭 꼼꼼히 읽자.

내가 해결한 방법은 구글링을 통해 gitlab-org#5476 이슈를 발견하고 댓글을 정독하며 내 케이스와 맞는지 확인한 뒤, 증상이 일치한 것을 확인하자마자 안내되어있는 방법을 적용한 것이다.

여기서 내 증상은, 깃랩 컨테이너의 /dev/shm 사이즈가 64MB였다는 것.

$ docker exec -it gitlab df -h /dev/shm
Filesystem      Size  Used Avail Use% Mounted on
shm             2.0G   29M  64.0M   2% /dev/shm

바로 docker-compose.ymlshm_size=2G를 추가하고 재시작해보니 문제가 사라졌다.

공식 문서… 공식 문서

그런데 해당 이슈의 댓글 마지막에 공식 튜토리얼 문서 링크가 있었다. 댓글 내용을 읽고 설마 설마 하며 들어가보니 아니나 다를까 관련 내용이 떡하니 있더라.

항상 공식 문서를… 공식… 확인…


  1. 아마 필수적인 서비스들을 WSL에서는 사용할 수 없기 때문인 것 같다. ↩︎

  2. 이는 .wslconfig에서 메모리 할당량을 늘려 해결했다. ↩︎

  3. 즉 초당 400줄 ↩︎

댓글

이 블로그의 인기 게시물

C# 남아도는 메모리에도 불구하고 OutOfMemoryException이 발생한다면?

MySQL 데이터 타입과 Java 데이터 타입 비교/매칭

테일즈위버 OST 전곡 모음