Nginx에 성능 문제가 있습니다.Nginx 성능 문제
하나의 Nginx 서버가 4 개의 node.js 응용 프로그램 앞에 앉아 있습니다. 노드 응용 프로그램은 멋진 일을하지 않고 expressJS 스택을 반복하며 외부 DB 소스 등에 액세스하지 않습니다.
저는 ApacheBench를 사용하여 응용 프로그램의 성능을 벤치 마크합니다. 내 upstream
규칙에서 단일 서버를 사용할 때 일정한 처리량을 얻을 수 있습니다. 1000 req/s
upstream cp_backend {
server 10.134.14.128:5000;
keepalive 32;
}
반환 1000 req/s
예를 들면 다음과 같습니다. 내가 (예를 들어, 두 번째 서버에서 실행) 두 번째 노드 응용 프로그램을 추가 할 때 :
upstream cp_backend {
server 10.134.14.128:5000;
server 10.134.34.226:5000;
keepalive 32;
}
을 (예상대로) 나는 주위 2000 req/s
처리량을 참조하십시오.
그러나 2 개 이상의 백엔드 서버를 추가하자마자 앱이 더 이상 선형으로 확장되지 않습니다. 예를 들어 :
upstream cp_backend {
server 10.134.14.128:5000;
server 10.134.34.226:5000;
server 10.134.26.172:5000;
keepalive 32;
}
만 약 2500 req/s
, 대신 예상대로 3000
을 반환합니다. 마찬가지로 예상대로
upstream cp_backend {
server 10.134.14.128:5000;
server 10.134.34.226:5000;
server 10.134.26.172:5000;
server 10.134.26.178:5000;
keepalive 32;
}
만 대신
4000
의 약
3000 req/s
돌아갑니다.
배경을 좀 더 제공하십시오. 나는 다른 서버 (non nodeJS) 응용 프로그램을이 서버 세트에서 실행 중이며 17k req/s
이상을 얻을 수 있으므로 Nginx를 알고 내 컴퓨터가이 숫자에 도달 할 수 있는지 알고 있습니다. content-length
이 노드 앱보다 실제로 17k 테스트에서 더 큰 것을 언급 할 가치가 있습니다.
각 노드 앱은 자체 리소스를 사용하여 별도의 VM에서 실행됩니다. top
과 같은 간단한 도구를 사용할 때 주요 병목 현상이 보이지 않습니다. 또한 node.js VM이 1000 req/s를 수행 할 수있는 단일 업스트림 서버를 사용할 때도 알 수 있습니다. nginx 병목 현상이있는 것 같습니다. nginx를 통해 1000 req/s를 얻을 수 있기 때문입니다. 각 노드 앱이 1000 req/s
을 사용할 수 있다는 것을 알고 있다면 4k req/s
과 4 upstream
개의 서버를 얻을 수없는 이유는 무엇입니까?
좋은 프로파일 링 소프트웨어에 대한 권장 사항은 무엇입니까?
답장을 보내 주셔서 감사합니다. 각 노드 응용 프로그램은 자체의 전용 VM을 가지고 있으므로 각 노드 응용 프로그램은 자체 코어에서 실행됩니다. 예제에서 볼 수 있듯이 각 노드 앱에는 자체 IP 주소가 있습니다. – cookandy
예제에서 볼 수 있듯이 각 노드 앱에는 자체 IP 주소가 있습니다. 그것이 네트워크라면, 나는 동일한 서버에서 실행되는 (더 큰 콘텐츠 길이와 함께) 다른 앱으로 17k req/s를 기대하지 않을 것이다. – cookandy
가상화 된 환경 내의 각 앱마다 다른 IP를 지정할 수있다. 귀하는 귀하의 세부 사항을 분명히하지 않았습니다. – Soviut