그동안 컨테이너 기술, 도커, 도커네트워크에 관하여 알아보았습니다.
현재 프로젝트에서 사용중인 bridge 네트워크의 구조에 대해서 알아보았으니, 문제가 될 만한 부분을 추측하고 원인을 찾아 해결해 보겠습니다.
테스트 환경
테스트
idle 상태
포트 포워딩 없이 컨테이너 실행
docker run -d --name my1 nginx
포트 한개만 포워딩
docker run -d --name my1 -p 40000:40000 nginx
포트 500개 포트포워딩
docker run -d --name my1 -p 40001-40500:40001-40500 nginx
포트 10000개 포트포워딩
docker run -d --name my1 -p 40001-50000:40001-50000 nginx
10000개 포트매핑 실행 영상
모니터링 프로세스가 터진 모습
서버가 터진 모습
메모리 overflow가 나면서 시스템이 멈춰버린다.
docker의 userland proxy로 인하여 포트포워딩 하나 당 docker-proxy 프로세스가 2개씩 생성됩니다.
생성되는 docker-proxy의 종류
/usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 40478 -container-ip 172.17.0.2 -container-port 40478
/usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 40478 -container-ip 172.17.0.2 -container-port 40478
포트포워딩 500개 당 메모리 약 900mb 할당
포트포워딩 설정 약 2000개 쯤, 메모리 overflow로 인하여 시스템이 터져버립니다.