이전 포스팅을 통해 Docker를 이용하여 GitLab을 설치했다.
GitLab을 사용하다 보면 아래와 같이 500 Error가 간헐적으로 발생한다.
잠시 후 새로고침이나 재접속을 하면 해결되기도 하지만, 상위 페이지로 이동해버리거나 증상이 지속되기도 한다.
이전 포스팅에서 다룬 Docker 이미지는 sameersbn/gitlab 였다.
문제는 다른 서버에 설치한 GitLab-ce 컨테이너에서도 동일한 증상이 발생하는 것이었다.
원인
이러한 장애 증상의 원인은 여러가지가 있을 수 있다.
리소스가 부족하거나, 용량이 가득 찼거나, 설정에 문제가 있거나 하는 등이다.
새로 셋팅한지 얼마 되지 않았고, 메모리나 저장공간에 문제가 없었기 때문에 설정 문제로 판단했다.
열심히 구글링 해 본 결과 Docker 컨테이너의 공유 메모리 크기를 의미하는 shm_size 크기가 작으면 해당 증상이 발생할 수 있다고 한다.
아래 명령을 사용하여 GitLab 컨테이너에서 shm_size를 확인해본다.
$ docker exec -it GitLab컨테이너이름 /bin/bash
$ df -h
아래와 같이 /dev/shm 사이즈가 64M인 것을 확인할 수 있다.
Docker 컨테이너의 기본 값으로 간단한 작업에는 별 문제가 없지만, 내부 메모리 사용량이 많을 경우 문제가 발생할 수 있다고 한다.
GitLab에 대용량의 파일이 커밋 된 이후 증상이 발생했는데, 대용량 파일 내부 정보를 읽어오면서 메모리 사용량이 급격히 늘어나면서 발생한 것으로 추정된다.
해결 방법
아쉽게도 컨테이너를 실행하고 잇는 상태에서는 해결이 불가능하다.
다음 순서로 진행해야 한다.
-
컨테이너를 중지하고 삭제한다.
-
공유 볼륨 데이터는 삭제하지 않고 보관한다. (중요)
-
컨테이너 실행 명령에 shm_size 옵션을 추가한다.
-
컨테이너를 새로 생성한다.
공유 볼륨을 유지한 상태로 컨테이너를 재실행하면 기존 데이터를 재사용할 수 있다.\
sameersbn/gitlab 이미지를 사용하는 경우
아래 포스팅의 방법으로 실행한 경우는 docker-compose.yml에 shm_size 옵션을 추가한다.
docker-compose.yml 파일을 열고 gitlab 부분에 shm_size 옵션을 추가한다.
### 예시를 위해 표시한 것으로 전체 코드가 아니다.
# docker-compose.yml 파일과 비교하면서 해당 설정을 변경하거나 추가하면 된다.
# docker-compose.yml 파일 내용 중 삭제한 내용은 없고, 삭제하면 안된다. (오류 발생)
gitlab:
restart: always
# 이부분에 추가한다.
shm_size: 1G
image: sameersbn/gitlab:14.0.5
depends_on:
... 중략 ...
shm_size에 설정하는 메모리 크기는 해당 시스템의 가용 메모리를 고려하여 설정한다.
NAS 서버의 메모리가 18G였는데 1G만 할당했다.
gitlab-ce 이미지를 사용하는 경우
gitlab/gitlab-ce 이미지를 단독으로 사용하는 경우에는 보통 docker run 명령으로 실행한다.
아래와 같이 shm-size 옵션을 추가한다.
$ docker run -i -t -d -h $HOST_NAME \
-p 80:80 -p 443:443 -p 2222:22 \
--name $CONTAINER_NAME --restart always --shm-size=4G \ # 이 부분에 추가
-v /data/docker/gitlab/git-data/etc:/etc/gitlab \
-v /data/docker/gitlab/git-data/log:/var/log/gitlab \
-v /data/docker/gitlab/git-data/opt:/var/opt/gitlab \
gitlab/gitlab-ce:14.6.0-ce.0
해당 서버의 메모리가 128G이므로 넉넉하게 4G를 할당했다.
docker-compose를 사용하는 경우 위의 docker-compose.yml 코드 수정 방법을 참고하여 진행하면 된다.
해결 여부 확인
docker-compose 또는 docker run 명령을 사용하여 GitLab 컨테이너를 재생성 하고 해당 증상이 발생하는지 확인한다.
해당 조치 이후 지금까지 관련 증상은 나타나지 않았다.
만약 증상이 계속 된다면 메모리 크기를 조금 더 늘려 볼 것을 권장한다.
해당 증상의 원인과 해결 방법은 아래 포스팅을 참고하였다.
'::: IT인터넷 :::' 카테고리의 다른 글
자체 서명 인증서 만들기 (4) | 2022.02.28 |
---|---|
wsl 환경에서 Docker 설치 이후 172.18.x 대역 연결 불가 (0) | 2022.02.24 |
GitLab의 자체 CI/CD 기능 비활성화 (0) | 2022.02.17 |
GitLab의 권한 관리와 설정 방법 (66) | 2022.02.14 |
Jenkins 권한 관리와 설정 방법 (0) | 2022.02.10 |