ASP.NET Web Garden-얼마나 많은 작업자 프로세스가 필요합니까?
ASP.NET 웹 응용 프로그램에 허용 할 작업자 프로세스 수를 결정하는 가장 좋은 방법은 무엇입니까?
내가 관리하는 한 서버에서 새 AppPool을 만드는 것은 기본적으로 10 (최대) 작업자 프로세스입니다. 다른 사람들은 정상적인 설정이 하나라고 제안합니다.
여러 작업자 프로세스가 해결하는 문제는 무엇이며 몇 개를 결정하는 기술은 무엇입니까?
작업자 프로세스는 여러 exe에서 웹 사이트 실행을 분할하는 방법입니다. 몇 가지 이유로이 작업을 수행합니다. 하나는 작업자 중 하나가 런타임 문제로 인해 방해를받는 경우 다른 작업을 중단시키지 않습니다. 예를 들어 html 요청이 들어 오면 프로세스가 아무 것도 실행되지 않는 경우 해당 작업자 프로세서에서 처리중인 다른 요청 만 종료됩니다. 또 다른 예는 하나의 요청이 동일한 작업자가 처리하는 다른 스레드에 대해 차단을 유발할 수 있다는 것입니다.
필요한만큼 부하 테스트를 수행합니다. 앱을 세게 치고 단 하나에서만 일어나는 일을 확인하십시오. 그런 다음 더 추가하고 다시 누르십시오. 어느 시점에서 당신은 기계 네트워크, 디스크, CPU 및 램을 진정으로 포화시키는 지점에 도달 할 것입니다. 그때 당신이 올바른 균형을 가지고 있다는 것을 알게됩니다.
또한 machine.config 파일을 통해 작업자 프로세스 당 사용되는 스레드 수를 제어 할 수 있습니다. 키가 maxWorkerThreads라고 생각합니다.
이제 세션을 사용하는 경우 세션 상태는 작업자 프로세스간에 공유되지 않습니다. 나는 일반적으로 어쨌든 세션을 피하는 것이 좋지만 고려해야 할 사항입니다.
모든 의도와 목적을 위해 각 작업자 프로세스를 별도의 웹 서버로 간주 할 수 있습니다. 같은 상자에서 실행되는 것을 제외하고.
여기의 지침은 꽤 좋습니다 : http://msdn.microsoft.com/en-us/library/ms998549.aspx
메모리 누수
다른 가장 큰 장점은 메모리 누수를 처리하는 것입니다. 때로는 코드를 최적화하려고 시도하지만 프레임 워크 자체 및 기타 타사 라이브러리에 메모리 누수가 있습니다. 결국 우리의 응용 프로그램이 매우 높은 메모리에 도달하고 메모리 예외를 제공하지 않는 것을 발견했습니다.
따라서 작업자 프로세스의 최대 가상 메모리 제한을 1GB와 같이 설정하고 여러 프로세스가 실행되도록해야했습니다. 단일 작업자 프로세스에 대해서도 최대 가상 제한을 설정할 수 있지만 이는 작업자 프로세스가 재활용 될 때 작업자 프로세스가 좋은 속도를 얻을 때까지 모든 요청이 느리기 때문에 속도가 급증합니다. 애플리케이션에 내부 캐싱 (Entity Framework 쿼리 캐시, 일부 개체 풀)이 있으므로 이러한 각 요소는 애플리케이션 시작 속도를 늦 춥니 다. 이것은 단일 작업자 프로세스가 가장 큰 피해를주는 곳입니다.
작업자 프로세스가 여러 개인 경우 재활용 모드의 프로세스 중 하나만 느리지 만 다른 프로세스는 좋은 속도를 유지합니다.
작업자 프로세스가 많은 것이 타당한 또 다른 경우는 애플리케이션에 병렬화를 방지하는 잠금이 포함되어있는 경우입니다. GDI + 기반 이미지 처리가 그 예 중 하나입니다.
내 문제에 대한 해결책을 찾으려고 할 때 찾았습니다 .
참고 URL : https://stackoverflow.com/questions/2151251/asp-net-web-garden-how-many-worker-processes-do-i-need
'Development Tip' 카테고리의 다른 글
Heroku에 로컬 MySQL 데이터베이스를 배포하는 방법 (0) | 2020.11.28 |
---|---|
String.replaceAll ()이 Java 8에서 Java 9와 다르게 작동하는 이유는 무엇입니까? (0) | 2020.11.28 |
PHP 연관 배열이 정렬되어 있습니까? (0) | 2020.11.28 |
함수의 모든 인수를 다른 함수에 전달 (0) | 2020.11.28 |
안드로이드 와이파이를 애드혹 와이파 이에 연결하는 방법? (0) | 2020.11.28 |