Visual Studio 2013 Ultimate 버전에는 성능 및 부하 테스트 도구가 포함되어 있다.

물론 에이전트와 컨트롤러는 또 별도로 다운로드 받아서 설치해야 하긴 하지만.


일단 현재 시점 기준으로 최신 업데이트는 Update 5.

이전 버전 사용하면 뭔지 모를 버그로 제대로 테스트가 되지 않을 수도 있으니 최신 버전 필수.


>> 다운로드: Agents for Microsoft Visual Studio 2013 Update 5



제목엔 에이전트만 써져 있지만 에이전트와 컨트롤러가 다 들어있다.

그런데 문제는(나만 겪은 문제일수도 있지만), 컨트롤러는 업데이트를 해도 제대로 업데이트가 안되어서

기존 설치 제거 후 새로 설치해야 했다. 무슨 이런...


더 문제는,

Visual Studio 2013을 Update 5로 업데이트하지 않으면 컨트롤러를 컨트롤 할 수 없다는 점.

그래서 Visual Studio 2013도 업데이트해야 한다.


>> 다운로드: Microsoft Visual Studio 2013 Update 5



모두 업데이트했으면 다시 구성을 처음 하듯 잘 해줘야 하고...;;


본격적으로

직접 겪은 문제를 해결하는 와중에 찾아낸 팁을 쓰자면,




1.


부하 테스트를 하다 보면 한참 열심히 부하를 늘려 가다가

어느 순간 에이전트에서 갑자기 아래와 같은 에러를 발생하면서 제대로 테스트가 되지 않는 경우가 있다.



예외 OutOfMemoryException Exception of type 'System.OutOfMemoryException' was thrown.



한창 테스트를 해야 하는 상황에 이런 문제가 발생하면 매우 곤란하다.

이유는, 에이전트가 처리할 수 있는 메모리 용량이 초과되었기 때문.
물론 테스트 컴퓨터 자체의 메모리가 부족할 리는 없을 테니 무슨 소린가 하겠지만,
32비트 프로세스의 제약으로 부호있는 정수의 경우 2^32의 절반, 즉 2GB가 메모리 한계다.
실제 에이전트에서는 1.75GB를 넘게 사용하면 에러를 발생시킨다고 한다.



해결 방법은 간단하다.

64비트 OS에서는 64비트로 실행하도록 테스트 설정을 바꿔주기만 하면 끝.
(부하 테스트 프로젝트의 Local.testsettings 파일을 편집하면 된다.)



이후부터는 메모리 부족 에러는 절대 발생하지 않을 것이다.




2.

또, 한참 부하를 늘려가며 테스트를 하던 도중에
정상적으로 페이지 요청이 발생해야 하는데 엉뚱한 페이지로 튀어서 유효성 검사 오류가 발생하는 경우가 있다.
일단 생각할 수 있는 유일한 이유는 인증 문제.


유효성 검사 규칙 오류 ValidateResponseUrl The value of the ExpectedResponseUrl property 'https://sso.abc.com/SSO/AuthWeb/Logoff.aspx' does not equal the actual response URL 'https://sso.abc.com/SSO/STS/ConnectSTS.aspx'.  QueryString parameters were ignored.



쿠키를 사용한 인증의 경우, 이전 테스트 요청에서 인증하거나 로그아웃하는 동작이 다른 테스트에 영향을 미쳐서

인증이 되어 있음에도 인증 받지 못한 것처럼 튀거나, 인증도 하지 않았는데 인증된 것처럼 동작하는 등

상식적으로 이해할 수 없는 이상한 현상이 발생한다.


해결 방법은 의외로 또 에이전트 컴퓨터의 레지스트리 설정 방법이다.

IE 8 버전 이후부터는 웹 브라우저(또는 WebRequest) 요청에서 서로 다른 창(또는 쓰레드)들이

기본적으로 세션이나 쿠키를 공유하도록 설계되어 있는데, 이것을 끊어서 공유되지 않도록 하는 방법이다.


>> 참조: http://blogs.msdn.com/b/askie/archive/2009/05/08/session-management-within-internet-explorer-8-0.aspx




위 그림처럼 HKCU\Software\Microsoft\Internet Explorer\Main에 "FrameMerging"이라는 DWORD값을 생성해주면 된다. 물론 값은 0 (disabled) 이다.


이후부터는 거짓말처럼 위와 같은 유효성 검사 규칙 오류가 사라진다.

진짜다!


위 방법으로도 안 된다면,

아래의 방법으로 처리해야 한다.


1. 테스트 샘플을 유일한(Unique) 사용자로 테스트할 수 있을 만큼 충분한 숫자로 준비한다.

   예를 들면, 2만 명 회사에서 부하 테스트로 30%인 6천 명을 가정한다면, 최소 1만 2천 명의 샘플을 준비한다.


2. 오류 발생 시 계속 진행하지 않고 중단하도록 구성한다. 보통 오류는 인증의 문제로 발생하게 되는데

   인증되지 않은 경우 계속 진행해 봤자 계속 오류가 발생할 수밖에 없다.


이상의 두 가지 방법을 적용하면, 비록 완전히 오류가 발생하지 않도록 할 수는 없더라도

어느 정도 테스트를 할 수 있을 만큼은 커버가 된다.



===> 위 2번 문제의 원인은 Distributed Cache 때문인 것으로 보인다(99%).


현재 테스트 환경에서는 AppFabric 분산 캐시가 사용되고 있는데, 이것이 적절히 반응하지 않으면, 즉 캐시 값을 제 시간에 읽지 못하면 인증을 튕겨버리게 만든다고 한다. 부하 테스트 중이므로 당연히 제 시간에 요청이 될 리는 만무. 타임아웃 값(기본값: 20ms) 을 적절히 늘려주면 된다.


>> 참조1: https://technet.microsoft.com/en-us/library/jj219613.aspx

>> 참조2: https://www.dmcinfo.com/latest-thinking/blog/id/8657/fix-sharepoint-2013-distributed-cache-timeouts



끝.





Posted by 떼르미
,


자바스크립트를 허용해주세요!
Please Enable JavaScript![ Enable JavaScript ]