도커 컨테이너 하나가 실행중인 gcp 프리티어 인스턴스에 추가로 컨테이너 몇개 실행할 생각이었다.
포트폴리오 사이트에 공개한 프로젝트들을 접속 해 볼 수 있도록 배포 해 두려고 프론트, 백엔드, DB 총 3개의 서버를 각각의 컨테이너로 돌리려고 했는데.. 프론트 하나만 띄워봤는데 바로 안된다. 포트도 열어줬는데(방화벽 설정) 왜 안될까?
근데 한참 기다리니까 접속이 간신히 되긴 한다. 그래서 메모리가 부족한가 했더니 아마도 그런 것 같다. 관련된 검색으로 swap메모리를 활용한다는 블로그를 발견했다.
이분은 빌드 시점에 메모리 부족을 대비한 것이었는데, 나처럼 도커 컨테이너를 유지하는데도 스왑메모리 설정이 유효할까?
=======================================================
1일 경과
=======================================================
왜인지 모르겠는데 하루 지난 오늘 접속하니 엄청나게 빠르다. 어제 컨테이너를 실행 하자마자 이렇게 빨랐다면 나는 아무 생각 없이 다른 백엔드나 DB 컨테이너도 바로 실행시켰을 것 같다.
기왕 알아보기로 한거 도커 컨테이너의 사용 리소스 등 필요한 것들을 살펴봤다.
docker stats --format "table {{.Name}}\t{{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"
NAME CONTAINER CPU % MEM USAGE / LIMIT
bulse_front a01ea1d88701 0.07% 454.5MiB / 973.3MiB
v2.2 aaadc1781058 0.00% 73MiB / 973.3MiB
sy@deploy-test:~$ free -mh
total used free shared buff/cache available
Mem: 973M 764M 65M 1.1M 144M 66M
Swap: 0B 0B 0B
sy@deploy-test:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 465M 0 465M 0% /dev
tmpfs 98M 1.1M 97M 2% /run
/dev/sda1 29G 6.9G 23G 24% /
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/loop1 50M 50M 0 100% /snap/snapd/17883
/dev/loop4 56M 56M 0 100% /snap/core18/2667
/dev/sda15 105M 4.4M 100M 5% /boot/efi
/dev/loop5 50M 50M 0 100% /snap/snapd/17950
/dev/loop3 335M 335M 0 100% /snap/google-cloud-cli/99
/dev/loop6 56M 56M 0 100% /snap/core18/2679
/dev/loop0 337M 337M 0 100% /snap/google-cloud-cli/101
tmpfs 98M 0 98M 0% /run/user/1001
일단 메모리 사용이 엄청 높아서 놀랐다. express + ejs로 만든 동적 웹사이트가 아래에 73mb를 차지하는데 비해 엄청나게 많은 리소스를 먹고있다. 도대체 왜? 라우터가 더 많고, 단순 코드 양도 많긴 하지만 왜 저렇게 많이 먹나 모르겠다.
메모리 점유 상태를 보면 available이 66mb로 백엔드 컨테이너를 실행 하기엔 무리일 것 같다. 지금 상황에 먼저 해 볼 수 있는 것은 프론트엔드 컨테이너의 메모리 사용량을 줄일 수 있는지 살펴보는 것 같다.
근데 react app container optimized memory limit 비슷한 느낌으로 암만 검색해도 관련 내용이 없다. 빌드 시점의 높은 메모리 사용에 관해서는 글이 있지만... 그래서 스택오버플로에 질문을 남겨봤다.