2013-08-30 3 views
-1

큰 부하가 걸린 서버 응용 프로그램에서 성능 병목 현상을 찾아야합니다. 응용 프로그램은 단일 서비스 인스턴스 (.asmx)와 http에서 수시로 요청되는 일부 파일로 구성됩니다. 이 문제를 해결하기위한 나의 계획은 1) 서버가 어떻게 든 실패하기 시작하는 예외적 인 상황에 도달해야합니다. 2) 성능 카운터와 로그를 분석하여 그 순간에 어떤 종류의 호출이 그 원인인지 확인하십시오.ASP.NET 웹 서비스 + IIS 성능 진단

이 작업을 시작하기 위해 두 가지 유형의 요청을 모두 처리하고 특정 시점에 무한정 희망하는 특정 클라이언트를 구현 한 특수 클라이언트를 구현했습니다. WebMethod/GET URL 요청 중에 오류가 발생합니다 (NB - 표준 기존 솔루션 JMeter 및 WAPT는 서비스 사용 시나리오의 복잡성에 이중으로 사용될 수 없습니다. 지금까지 내가 관찰 한 것은 서비스 호출의 응답 시간 증가와 파일로드 중 일부 네트워크 시간 초과 예외 (HttpClient를 사용하여 -에 따라 시간 초과로 간주되는 OperationCanceledException을 throw 함)입니다. Btw는 파일 크기가 kb kb이기 때문에 이상합니다. 서비스 메소드는 요청 당 5-10MB의 데이터를 반환합니다. "더 큰"요청이 먼저 실패 할 확률이 높습니다.
성능 모니터링 (Perfmon)은 CPU 부하가 증가하고 메모리 스파이크/누출이 전혀 발생하지 않음을 보여줍니다. Request Execution Time 카운터는 꽤 무작위 적이며 관련이 없습니다. 큐 길이는 항상 0입니다.
IIS는 즉각적인 DDoS를 잘 처리하는 동시에 테스트 접근 방법을 비효율적으로 만듭니다 (응답 시간이 늘어남에 따라 어떤 시점에서 메모리 오버플로가 발생하는 테스트 클라이언트, 그리고 아무 것도하지 않고 데이터를받은 직후에 이미 데이터를 플러시하고 있습니다.)
추가 세부 정보 : 서버 컴퓨터는 4x3Ghz 코어, 4Gb RAM입니다. 초당 50-100 개의 요청로드를 생성하여 테스트 클라이언트가 서버의 데이터 센터, 4Gbps NIC 내부의 VM에 위치하며 10-20Mb/초 대역폭을 발생시킵니다. 30 분 테스트 세션은 서버와 클라이언트 사이의 순수한 데이터 전송의 ~ 10-30 Gb입니다.
웹 서비스/IIS를 실제로 어떻게 만들 수 있습니까?

+0

서버 인프라에서 일부 오류가 발생하여 성능 병목 현상이 발생할 수있는 방법을 찾고 있었지만 이제는 무차별 대입 방식이 효과가 없다는 것이 확실합니다. 이 질문을 삭제하십시오. 미리 감사드립니다. – Jaded

답변

1

먼저 내 부하 테스트 도구를 쓰지 않을 것입니다. 거기에 충분히 사용할 수 있습니다. 나는 JMeter (오픈 소스)을 사용했습니다. JMeter (및 기타 유사한 도구)를 사용하여 POST와 GET을 모두 parameters, 쿠키 및 기타 HTTP 헤더를 보낼 수 있습니다. 물론 복잡한 경우에는 어려워 질 수 있습니다.

다음으로 네트워크, 라우터, 방화벽 등 모든 인프라가 실제로 서버가 아닌지 확인하십시오. 네트워크, 라우터, 방화벽 등은 모두 최대 기능을 갖추고 있으며 문제의 근본 원인 일 수 있습니다. 대부분은 로깅 및보고 도구를 가지고 있습니다. 예를 들어 테스트 결과 방화벽의 최대 용량에 도달했을 때 처리량 문제가 있음을 알았습니다. 서버는 심지어 깨지기 쉬운 지점에도 근접하지 않았습니다. CDN에서 제공되는 테스트 케이스에 비교적 큰 바이너리 파일을 포함 시켰기 때문에 이런 일이 발생했습니다.

다음으로 전체적으로 보면 정적 HTTP 요청을 처리하는 것이 문제가 될 것 같지 않습니다. IIS는 실제로 실제로는 good입니다. 언급 한 하드웨어 종류의 경우 초당 수천 건의 요청을 처리 할 것으로 예상됩니다. 정적 파일 용.

대부분의 상황에서 .asmx는 문제를 일으키는 동적 페이지입니다. 그래서,로드 테스트에서 모든 정적 파일을 무시하고 .asmx에 초점을 맞 춥니 다. 언급 한 하드웨어 종류에서, asmxes가 제대로 작동한다면 아마도 초당 수백 건의 요청을 생성해야 할 것입니다.

웹 서버가 올바로 조정되었고 asmx 스크립트가 상당히 효율적이라고 가정하고 작업 할 때 서버가 가져야하는 테스트 시스템에서 적어도 두 배의 CPU 및 메모리 용량이 필요합니다. JMeter를 사용하여 얻은 나의 경험에 기반하고 있습니다. JMeter는 웹 응용 프로그램만큼 효율적이지 않지만 여러 테스트 클라이언트를 쉽게 배포 할 수 있습니다. 따라서 귀하의 경우 서버 사양과 일치하는 2 대의 컴퓨터를 찾습니다.

JMeter (그리고 다른 모든 부하 테스트 도구와 함께 작업 한 적이 있음)를 사용하면 여러 컴퓨터를 부하 테스트 클라이언트로 쉽게 사용할 수 있습니다. 또한 JMeter를 사용하여 Cloud 기반로드 생성을 사용했습니다.

나는이 엄지 손가락 규칙이 사실 인 이유를 완전히 모르겠다. 그러나 나는 여러 프로젝트에서 그것을 관찰했다.

+0

1) 여러 번 시도했지만 적용 할 수 없습니다. 서비스에 전달되는 많은 동적 매개 변수가 있으므로 JMeter 및 WAPT와 같은 모든 도구는 클라이언트 작업을 시뮬레이트하지 않으며 결국 SQL Server 캐시에 충돌하여 최소한의로드를 생성합니다. 2) 현재 테스트 머신은 서버와 동일한 데이터 센터의 VM에 있으며 4Gbps NIC가 있습니다. 네트워크가 문제가되지 않을 확률이 높습니다. 3) 정확히 내가 생각하고있는 것입니다. 그것을 증명할 수있는 통계/통계는 어디에서 찾을 수 있습니까? 도움을 주셔서 감사합니다, 왜이 문제는 투표 마감 될 수 있습니다 이해가 안돼. 성능 테스트는 매우 흥미로운 과학입니다. – Jaded

+0

추가 정보를 제공하여 질문을 업데이트 할 수 있습니다. 답변을 제공 할 수있는 다른 사람들에게 도움이됩니다. 내가 답변을 업데이 트했습니다. 질문이 흥미롭지 않기 때문에 사실적 대답이 아닌 의견이나 논쟁을 불러 모으기 때문에 사람들은 투표를 종료하려고합니다. –

+0

제공된 정보를 다시 한번 감사드립니다. 마지막 진술을 더 명확하게 설명해 주시겠습니까? "4 코어 4Gb 서버를 해독하고 최소한 두 배의 리소스가있는 테스트 클라이언트 시스템이 필요합니까"라는 뜻입니까? 필자는 테스트를 수행 할 때 응답 시간이 증가함에 따라 요청 양이 어느 정도 줄어들어 메모리 사용량이 기하 급수적으로 증가하고 테스트 워크 스테이션이 테스트를 망쳐 놨다 고 생각하기 시작했기 때문에 이와 같은 것으로 의심됩니다. 그러나 서버가 응답하는 시간이 길어질 때 많은 서비스 핸들이 메모리에서 응답을 기다리고 있으므로 아무 것도이를 수행 할 수 없기 때문에이를 극복하는 방법을 모릅니다. – Jaded