본문 바로가기

Programming

Nginx 를 사용한 Load balancer 역할의 Reverse proxy 적용 시, 늘어나는 뒷단 서버의 개수만큼 생각처럼 수용량이 늘지 않을 경우 (socket: too many open files)

 로드밸런서 역할을 할 리버스프록시 서버 nginx 가 들어있는 docker container 를 실행했다.

 

처음에는 리버스프록시 뒷단에 ec2 두대로 k6 확인을 했었는데 대략 800? VUs 까지 버티는 것으로 보였다.

 

아니.. 그러면 단순히 ec2 를 세대, 네대, 다섯대 늘리면 과부하(stress) 테스트를 했을 때 버틸 수 있는 VUs 수가 그 만큼 선형으로 증가하는가??

 

해서 ec2 를 5대까지 늘려보았다.

 

근데 계속 1000 VUs 근처에서 too many open files 에러가 나면서 request fail 이 뜬다.

 

나중에 보니 정확히는 1024 VUs 였는데,

 

ulimit -a

ulimit -aH    // 하드

ulimit -aS    // 소프트

유저 리밋에서 파일 오픈 가능 개수가 1024로 걸려있었던 탓이다.

 

ulimit -n 4096

위 명령어로 개수를 늘려준다.

 

다시 k6 부하테스트를 진행해보니 5대로 3000VUs 까지 무난한 것으로 보인다.

 

(1차 확인 후 주말 지나서 다시 서버 개수별 최대 VUs 확인하려니 교육 받을 때 쓰던 aws iam 계정 접속이 안되어 확인을 못했다. 이건 아쉽지만 나중에..)

 

------------------

 

연결을 끊었다가 다시 접속하면 초기화 되어있다.

 

sudo vi /etc/security/limits.conf

위 config 파일을 수정해야 한다.

 

변경 하고, 재접속하면 적용되어있다.

 

추가로,

 

ulimit 과 hard, soft 내용은 아래를 참고함.

 

https://faq.hostway.co.kr/Linux_ETC/7179

 

User limit 이란?

ulimit 프로세스의 자원 한도를 설정하는 명령으로, soft한도와 hard한도 두가지

 

soft : 새로운 프로그램을 생성하면 기본으로 적용되는 한도

hard : 소프트한도에서 최대로 늘릴  있는 한도

 

 

apache  같이  서비스를 운영  동접자가 많은 경우 구동되는apache 프로세스 수와 해당  프로세스가 처리하게되는 파일  또한 증가함

 

이에 따라 시스템 적으로도 해당 요청에 대응   있도록 상향 설정이 필요함