NGINX WebSocket 성능 테스트 결과
NGINX를 사용하여 NGINX WebSocket 연결의 확장성을 테스트했습니다. 50,000개의 Active WebSocket 연결이 있더라도, NGINX는 1GB 미만의 메모리와 1개의 코어 이하의 CPU 용량만을 필요로 했으며, 매우 많은 연결로 부하가 되었을 때에도 메모리 사용량은 안정적이었고 메시지 크기보다 느리게 증가했습니다. 성능은 애플리케이션의 특성에 따라 다를 수 있지만, 이러한 테스트 결과는 NGINX가 사용할 리소스의 양에 대한 어느 정도의 예상을 제공할 수 있습니다.
목차
1. NGINX WebSocket 테스트 환경
2. 테스트 진행
3. NGINX WebSocket 테스트 요약
1. NGINX WebSocket 테스트 환경
다음과 같은 기기가 NGINX WebSocket 테스트에 사용되었습니다:
- 부하 생성기 – 6코어 Xeon EX5645 @ 2.40 GHz, 48GB RAM의 thor
- NGINX – 버전 1.7.0, x86_64, 6개의 Worker가 있는 6코어 Xeon E5645 @ 2.40 GHz, 48GB RAM
- WebSocket 백엔드 – 4코어 Xeon E5-2660 0 @ 2.20 GHz, 8GB RAM의 Node.js echo 서버
2. 테스트 진행
두 번째 테스트 세트를 실행했습니다.
첫 번째 테스트 세트는 장기간 유지되는 대부분 idle 상태의 연결을 시뮬레이션했습니다.
연결 수는 1,000에서 50,000까지, 메시지 크기는 10에서 4096바이트까지, 메시지 주기는 0.1에서 10초까지 다양하게 설정되었습니다(저주기로 간주되었습니다).
결과는 WebSocket 연결에 필요한 총 메모리가 연결 수에 따라 달라지며, 연결당 사용되는 메모리는 일관성을 가진다는 것을 보여줍니다.
메시지 크기나 주기는 메모리 사용에 영향을 주지 않습니다. CPU 사용률은 기본적으로 연결 수와 함께 추세를 이루며, 50,000개의 연결에서도 CPU 코어를 완전히 사용하지 않았습니다.
여기서 표시된 CPU 사용률은 모든 코어의 CPU 사용률을 합산하여 단일 코어로 정규화한 것입니다. 다음 그래프는 이 테스트 세트의 결과를 보여줍니다.



두 번째 NGINX WebSocket 테스트 세트는 단기간 동안 활발한 연결을 시뮬레이션했습니다.
동시 연결 수는 500으로 유지되었으며, 각 연결당 50개의 메시지가 전송되었고 메시지 간 지연은 없었습니다.
메시지 크기는 1에서 4096바이트까지 다양하게 설정되었습니다.
결과는 고정된 동시 연결 수에서 총 메모리 사용률이 메시지 크기의 요인이며,
연결당 사용되는 메모리도 마찬가지입니다. 그러나 두 경우 모두 메모리 양이 크게 변하지 않으며, 서브-선형적인 방식으로 변동되며 15% 미만으로 증가합니다.



3. NGINX WebSocket 테스트 요약
이러한 테스트 중에 NGINX는 WebSocket 서버를 프록시하는 경우 예측 가능하고 확장 가능한 성능을 제공했습니다.
이러한 테스트는 합성 테스트이며 실제 애플리케이션을 대표하는 것은 아니므로 다른 시스템에서 수행된 테스트 결과는 다를 수 있습니다.
자세한 내용은 다음을 참조하세요.
아래 뉴스레터를 구독하고 NGINX와 NGINX STORE의 최신 정보들을 빠르게 전달 받아보세요.
댓글을 달려면 로그인해야 합니다.