-
[NCP, Docker] 왜 내 서버 Disk 사용량이 90퍼?📚 개발백과 2024. 5. 30. 01:30728x90
상황:
NCP console 들어갔다가 디스크 사용량이 90%라는(;) 숫자를 봄
항상 40퍼대를 유지했는데 오늘 오후 3시경부터 증가하더니 발견한 시점인 당일 오후 10시 반에는 90프로를 찍음
결론부터 말하자면 로그파일 하나가 24G 나 잡아먹고 있었다.
원인 분석하는 방법부터 시작
0. 해당 서버에 접속부터 한다.
1. docker prune (각자 상황에 맞게.. 중요한건 보호하면서 삭제하길)
$ docker volume prune $ docker system prune -a 등등
난 현재 실행중인 컨테이너 제외하고 모든 데이터를 삭제했는데도 4G 밖에 삭제되지 않았다.
그럼 이 문제는 아니다.
2. 도커 디렉토리와 그 직속 하위 디렉토리들의 디스크 사용량을 확인하고, 그 결과를 크기에 따라 내림차순으로 정렬
$ docker info | grep -i "docker root dir" 위 명령어를 통해 나온 주소를(나는 /var/lib/docker였다.) $ sudo du -h --max-depth=1 /var/lib/docker | sort -rh
/var/lib/docker/containers 에서 24G 를 차지하는 것을 확인
/var/lib/docker/containers 로 이동하자
$ cd /var/lib/docker/containers
3. 현재 디렉토리(.) 내의 모든 파일 및 하위 디렉토리(*)의 디스크 사용량을 검사
$ du -sh ./* | sort -h
153b어쩌구 컨테이너가 24G 를 사용하는 걸 확인
해당 컨테이너 디렉토리에 들어가자
$ cd ./해당컨테이너아이디복붙
4. 다시 한번 디스크 사용량을 본다
$ du -sh ./* | sort -h
이 컨테이너의 로그 파일이 24G 를 차지하고 있던 것..;
여기서 잠깐,
로그 옵션을 설정하지 않으면 이렇게 host directory 에 크기 제한 없이 계속 쌓이게 된다.
참고:
https://velog.io/@xolgit/나만-몰랐던-Docker-logs
--log-driver local 로 컨테이너 내부 파일에 로테이션으로 로그가 찍히게 변경한다.
5. 문제의 컨테이너에 로그 옵션 주기
내 문제의 컨테이너는 실행중인 컨테이너이다.
옵션은 동적으로 줄 수 없으므로 docker stop -> rm 후, 다시 띄울때 옵션을 주어야한다.
// docker-compose.yml 로 설정하기 version: "3.7" services: ...: ... logging: options: max-size: "10m" // 한 로그 파일의 최대 용량 max-file: "5" // 로그 파일의 최대 개수 // cli 로 설정하기 docker run 어쩌구 --log-opt max-size=10m --log-opt max-file=5 저쩌구
6. 문제의 로그 파일 삭제하기
docker rm 할때 삭제된다.
디스크 전체 사용량이 줄었다.
조금만 늦었으면 많이 귀찮아졌을뻔;
원인 추측, Disk Write 분석
Disk Used 그래프와 마찬가지로 약 3시경부터 쓰기가 폭발적으로 늘어났다.
최고로 많이 쓰인건 8000KB 이상, 한번 폭발할때마다 평균 7500KB 고도의 산이 생긴다..
평소엔 Disk Write 는 60KB 정도였다.
로그 분석 툴이 갖춰져있지 않는 상태라 일단은 ssh shell 에 최대한 출력해봤는데 0.0001 초 단위로 로그가 찍혀서 분석이 어려울 뿐더러 전부 INFO 로그 였다.
인증 서비스에서 이런 일이 일어난 건데, 인증 서비스의 api 는 구글,카카오 로그인/로그아웃/reissue 이 세 API 뿐이다.
또한 아직 테스트 사용자도 없었고, 개발자 4명만이 웹앱 주소를 알고 있었다.
느낌상 프런트 단에서 무한 요청을 보내는 것 같은데...
확인부탁한다고 얘기는 해두고 위에 작성한대로 로그는 로테이션 돌도록 변경한 후
다음 날 보니까 이전처럼 평균 50KB write 로 돌아와있었다.
728x90'📚 개발백과' 카테고리의 다른 글
2의 보수는 왜 쓰는 걸까? (0) 2024.07.28 [Git] git filter-repo로 올리면 안되는 파일기록 말소하기 (0) 2024.06.24 [GitHub Action, Docker, SSH] application.yml 에 환경변수 많은데 어떻게 하지 (0) 2024.05.27 [GitHub Action] Error_command not found: docker (0) 2024.05.27 kafka 다운 및 실행 (1) 2023.12.23