2014-09-30 4 views
0

이전 COM/OLE 서버 인스턴스 주위에 .net 래퍼를 작성했습니다. 그것은 몇 가지 초기화 호출과 마지막 'go/calculate 호출'이 필요한 상태 저장 래퍼입니다.작업자 스레드 제한이있는 WCF

이 최종 호출은 클래스의 새 인스턴스를 만든 다음 COM 인스턴스를 만들고이를 IIS 작업자 스레드에 개별적으로 실행할 수 있도록 System.Threading.Thread를 사용하여 새 스레드를 만들고 상태 확인을 위해 호출합니다 궁극적으로 결과를 얻습니다.

문제는 내가 20 개 이상의 동시 인스턴스를 만들 때 메모리 부족 예외가 발생합니다. 다양한 조정을 시도했습니다. 여러 작업자 스레드를 만드는 것은 상태 기반 특성 때문에 도움이되지 않습니다 (저는 믿습니다). 나는 아무 소용이

http://www.codeproject.com/Articles/133738/Quick-Ways-to-Boost-Performance-and-Scalability-of

많이 노력했다. 스트레스 테스터에서는 WCF 서비스 대신 직접 래퍼 클래스를 인스턴스화하려고 시도했으며 문제가 발생하기 전에 인스턴스를 150 개 이상 실행할 수 있습니다.

IIS insatnce가 생성 할 수있는 작업자 스레드 수를 늘리는 방법을 알고있는 사람이 있습니까?

+0

아니요 - 같은 상자에서 직접 전화를 걸고 150 개 이상의 인스턴스를 가져올 수 있습니다. 서비스가 호출 될 때만 하드 한도가 20이됩니다. –

+0

OOM 예외는 어디에서 발생합니까? 그 구성 요소는 무엇입니까? 콜 스택 (callstack)이란 무엇입니까? 서버 프로세스가 32 비트이고 다른 테스트 프로세스가 64 비트입니까? – usr

+0

'Activator.CreateInstance (rtwbType)'생성시 예외가 발생합니다. 64 비트 상자이지만 WCF 서비스는 인스턴스화중인 COM/OLE 서버와 마찬가지로 32 비트입니다. 예외가 발생하면 새 스레드가 이미 생성됩니다. 예외는 일반적으로 현재 전체 IIS 작업자 프로세스를 중단시킵니다. –

답변

0

웹 정원을 사용하면 도움이 될 것 같은데요. 앱 풀 설정의 최대 작업자 프로세스를> 1로 설정하십시오.

이러한 상황이 계속 될 경우 도움이 될 수 있지만 이상적으로는 코드를 식별하고 병목을 최적화하는 것이 가장 이상적입니다.

https://serverfault.com/questions/81689/web-gardens-are-they-good-or-bad-or-what

참고 단점은 다음과 같습니다 PROC 세션 상태에서 응용 프로그램 풀에 걸쳐 유지하고 각 프로세스는 ASP를 HTTP 캐시를 사용하는 경우는 자신의 캐시 사본의 것 없습니다.