womble 의 답변은 굉장하지만, 경험이없는 사람들을 이해하고 적용하기는 조금 어렵습니다. 경험적인 숫자와 "간단한 콘텐츠"와 "전자 상거래"응용 프로그램 비교를주고 싶습니다.
적절한 mod_wsgi 구성과 관련하여 서로 다른 유스 케이스를 설정하는 것에 대한 자료는 많지 않으므로 여기에서 약간의 산문을 사용하는 것이 좋습니다.
A) CMS 사이트 및 마이크로 사이트
우리는 여러 고객 웹 사이트를 운영하며, 대부분은 주로 장고 CMS를 호스팅하는 콘텐츠 사이트 또는 마이크로 사이트, 일부 사용자 지정 양식, 때로는 백그라운드 작업을 위해 Celery를 운영합니다. 이 사이트는 리소스가 부족하지 않기 때문에 32GB RAM이 장착 된 단일 4 코어 Intel Xeon에서 병렬로 실행되는 사이트도 있습니다. 이러한 종류의 사이트 각각에 사용하는 구성은 다음과 같습니다.
WSGIDaemonProcess example.com user=www-data processes=2 maximum-requests=100
단일 서버에서 약 40 개의 사이트에 대해 이야기하고 있는데, 대부분 스테이징 사이트가 대기 상태에서 실행됩니다. 서버 리소스 할당 기능에는 제한이 있지만 2 개의 프로세스 (기본적으로 각각 15 개의 스레드가 있음)를 사용하면 사이트의 상태가 양호합니다. 이 설정이 충분한 이유는 (CMS) 애플리케이션의 간단한 특성으로 정당화 될 수 있습니다. 요청을 완료하는 데 몇 밀리 초 이상 걸리지 않습니다. 아파치는 항상 편안한 상태를 유지하므로 CPU 부하도 늘어납니다.
B) 전자 상거래 사이트
더 복잡한 사이트는 계산 비용이 저렴한 로컬 운영이지만 거래 시간 측면에서 비싼 외부 종속성 (예 : 예약 데이터를 제공하는 웹 서비스)이 특징입니다. 외부 요청이있는 작업은 훨씬 더 오랜 시간 동안 스레드를 차지하므로 동일한 수의 사용자를 수용하기 위해 더 많은 스레드가 필요합니다 (위의 간단한 CMS 사이트와 비교). 더 나쁜 것은 외부 서비스가 요청에 즉각적으로 응답 할 수 없을 때, 때로는 몇 초 동안 스레드가 차단되는 경우가 있습니다. 이로 인해 사용 가능한 모든 mod_wsgi 스레드가 모두 사용되어 대기가 차단 될 때까지 스레드가 요청을 동일한 서비스 큐에 배치하는 불쾌한 부작용이 발생할 수 있습니다.
이러한 시나리오에서 우리는 6
큰 차이를 보지 않고 프로세스 를 사용하려고 시도 12
했으며 결과적으로 성능과 운영 안정성이 비교할 수없는 향상 을 보았습니다.
WSGIDaemonProcess example.com user=www-data processes=12 maximum-requests=100
150 명의 사용자와 250 명의 병렬 사용자에 대한 일부 간단한로드 테스트는 사이트의 응답 속도를 유지하면서 쉽게 처리 할 수 있습니다 ( 2
프로세스를 사용하면 50 명의 사용자를 동시에 처리 할 수없는 프로세스). 32GB RAM이 장착 된 2 CPU 6 코어 Intel Xeon은 해당로드에서 25 % 미만의 CPU 사용률을 유지하며 RAM 사용량도 거의 25 % 미만으로 일정하게 유지됩니다. 여기서는 단일 사이트에만 전용 시스템을 사용하므로 다른 사이트에 필요한 리소스를 훔치지 않습니다.
결론
더 많은 수의 프로세스를 사용하는 것은 Apache가 사용 가능한 시스템 리소스를 사용하도록 허용하는 것 사이의 균형입니다. "공격"조건에서 안정적인 서버 시스템 (웹 사이트 아님!)을 유지하려면 숫자를 낮게 유지하십시오. 필요할 때 Apache가 시스템 리소스 (CPU, RAM)를 사용하도록 도와 주려면 더 높은 숫자를 선택하십시오. 당신이 갈 수있는 높이는 위의 허용 된 답변에 요약 된 것처럼 다소 계산되며 궁극적으로 사용 가능한 CPU 전력 및 RAM에 의해 제한됩니다.
(PS : modwsgi 프로젝트 위키 의 ConfigurationDirectives 섹션 을 Apache와 같은 백그라운드 읽기 용 베개 아래에 보관합니다 . 또한 Apache 서버의 열린 연결 을 이해하고 모니터링해야 합니다 .)