내장 된 ServiceHost와 함께 호스팅되는 WCF net.tcp 서비스가 있으며 일부 스트레스 테스트를 수행 할 때 이상한 동작이 발생합니다. 처음으로 요청을 보내면 5 ~ 10 건의 요청에 신속하게 응답하고 나머지는 약 2 초 간격으로 반환합니다. 두 번째로 요청을 보내면 10-20이 신속하게 반환되고 2 초 간격으로 휴식을 취합니다.net.tcp로 WCF의 성능
위의 내용은 100 개 이상의 요청을 신속하게 반환 할 때까지 반복되지만, 잠깐 기다리면 서비스의 메모리 사용량이 줄어들고 요청이 다시 5-10으로 돌아갑니다.
내가 테스트하고있는 서비스에는 약간의 지연이 있으므로 동시에 많은 연결을 열 수 있습니다. 지연이 제거되면 요청이 너무 빨리 반환되어 동시에 2-5 개의 연결이 동시에 열립니다 . 이 지연은 DB 연결 및 기타 보내는 물건을 시뮬레이션하는 것입니다.
ServiceHost가 무언가, 스레드, 클래스 인스턴스를 할당하는 것처럼 보이지만 그게 무엇인지 알 수는 없습니다.
나는 서비스를 계속 호출하기 위해 서비스를 호출하는 타이머를 클라이언트에 가질 수 있지만, 이는 나쁜 해결책으로 보입니다.
서비스에 지속적으로 많은 부하가 걸리면 모든 요청이 신속하게 처리되지만, 활동이 적을 때 서비스의 서지가 급증하면 서비스 속도가 느려집니다.
제가 궁금한 점은 WCF 서비스의 부하가 높을 때 할당되는 것입니다. 할당 된 것보다 더 많은 것을 미리 할당하도록 서비스를 구성 할 수 있습니다.
EDIT : 나는 더 많은 테스트를했는데 프로세스에 대한 taskmgr을 보면 servicehost가 '쉬고있는'경우 10 개의 스레드가 열려 있지만 요청을 보내면 threadcount가 올라간다는 것을 알 수 있습니다. threadcount가 높으면 서비스 호스트는 들어오는 요청을 빠르게 처리 할 수 있습니다. 그러나 요청 전송을 일시 중지하면 열린 스레드 수는 감소하고 후속 요청은 처리하는 데 더 오랜 시간이 걸리기 시작합니다.
이제 서비스 호스트에게 스레드 묶음을 열어 둘 것을 어떻게 알릴 수 있습니까? 또는 기본적으로 10-12 이상 유지됩니까?
감사합니다, 나는 사이트를 확인하고, 설정, 높은 한계 내 설정 파일에 이미 난 한 번 대신 먼저 5 ~ 10과의에서 들어오는 모든 연결을 처리 할 수 있어야 너무 높아서있다 2 초에 1 번. – Kim