::: IT인터넷 :::

gitlab-ce에서 간헐적으로 발생하는 500 Error 해결 방법

곰탱이푸우 2022. 2. 21. 08:20
이전 포스팅을 통해 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에 대용량의 파일이 커밋 된 이후 증상이 발생했는데, 대용량 파일 내부 정보를 읽어오면서 메모리 사용량이 급격히 늘어나면서 발생한 것으로 추정된다.
 
 

해결 방법

아쉽게도 컨테이너를 실행하고 잇는 상태에서는 해결이 불가능하다.
 
다음 순서로 진행해야 한다.
  1. 컨테이너를 중지하고 삭제한다.
  2. 공유 볼륨 데이터는 삭제하지 않고 보관한다. (중요)
  3. 컨테이너 실행 명령에 shm_size 옵션을 추가한다.
  4. 컨테이너를 새로 생성한다.
 
공유 볼륨을 유지한 상태로 컨테이너를 재실행하면 기존 데이터를 재사용할 수 있다.\
 

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 컨테이너를 재생성 하고 해당 증상이 발생하는지 확인한다.
 
해당 조치 이후 지금까지 관련 증상은 나타나지 않았다.
만약 증상이 계속 된다면 메모리 크기를 조금 더 늘려 볼 것을 권장한다.
 
해당 증상의 원인과 해결 방법은 아래 포스팅을 참고하였다.