안녕하세요.
현재 특정 사이트에 대해서 순간부하를 주기위한 스크립트 작성 후 테스트 중에 있습니다. 하지만, 쓰레드 2500개(VUser가 1만명)가 넘어버리면 에이전트가 죽어버리는 현상이 발견되어 사내 개발자분께 문의해보니, Agent 서버의 JVM size를 조정해보라고 하셔서 계속 조정하면서 테스트 중이지만, 계속 오류가 발생합니다. Agent 서버 사양은 아래와 같고, 총 4대로 구성되어있습니다. Intel E5-2620 2.0GHz 6Core(24 Virtual Core) 16GB 300GB SAS(2EA Raid 1) Windows 2008 R2 서버입니다. 현재 적용된 JVM Heap size는 init: 1024;max: 2048 입니다. 1. Agent JVM Heap 적정 사이즈는 어떻게 되나요? heap 사이즈 문제가 아니라면 어느 부분을 더 봐야하는지?? 2. 실제 단일 url을 호출 할 경우 vuser가 많아도 처리가 가능한데, 리소스 폴더의 txt 파일에 들어있는 url을 읽어서 처리하는 경우 agent가 죽는 케이스가 많습니다. 외부 파일 오픈 시에 성능상 문제가 많이 발생할 수 있는지도 답변 부탁 드립니다. 감사합니다. |
Administrator
|
xmx xms 를 어떻게 주시던지 간에 에이전트는 Worker Process(실제 테스트를 띄는 프로세스입니다.)를 띄울때 자체적으로 메모리를 재설정합니다. 따라서 에이전트 실행시에 JVM Size 조정은 아무런 의미가 없습니다. 예를 들어 현재 4G의 메모리를 가지고 있고 그중 3G가 Free라면, 10개의 프로세스를 띄울시 하나의 프로세스당
약 270mb의 메모리를 사용하도록 설정하여 실행됩니다. (이를 Heap과 PermGen으로 또 분할하여 처리합니다.) 프로세스당 메모리 사이즈는 1G를 절대로 넘지 않습니다. 이는 가비지컬렉션의 영향을 최소화 하기 위합니다. 저희 테스트 결과 VUser 1만이라는 숫자는 한개의 PC에 1만개의 쓰레드가 작동한다는 이야기 인데요.
이 경우 왠만한 OS에서는 메모리 릭이 발생하기 시작합니다. JVM 레벨이 아니라 OS 차원에서.. 최근에 테스트한 결과 2Core 4G 메모리상에서 VUser 8000으로 동작시키면 Groovy 사용시에는 약 16분후 메모리 부족으로 인한 쓰레싱 현상이 발생하기 시작한 것을 확인할 수 있었습니다. Jython은 더 메모리 사용량이 많기 때문에 약 5분 정도후에 쓰레싱이 발생합니다.
따라서 한개의 에이전트당 VUser 수를 적절히 유지하시는게 낫습니다. 최대 3000 정도로 하시는게 적당해 보이구요. 더 많은 VUser 가 필요하시면 에이전트를 추가하세요. 그리고 외부 txt를 읽을 경우 당연히 메모리 소요량이 늘어나기 때문에 에이전트가 죽는 경우가 발생합니다.
(정확히는 컨트롤러가 메모리 사용량을 모니터링하여 쓰레싱 발생직전에 자동으로 에이전트를 정지시키죠) 그리고 파일을 읽는 로직이 잘못되었을 가능성도 높는데, @BeforeProcess 로직에서 파일을 읽으시면 그나마 낫지만 만약 @BeforeThread 에서 파일을 읽었을 경우, 쓰레드 개수만큼 파일을 반복해서 읽게 되는 겁니다.
이 경우 한개의 파일을 읽는데 1MB가 소요되고 VUser가 2000 일경우 2G가 파일을 위해 사용되는 겁니다. 그럼. 2014년 3월 14일 오후 5:36, mulder [via ngrinder] <[hidden email]>님이 작성: 안녕하세요. |
답변 감사합니다.
그렇다면, 로그인 테스트와 같이 테스트 아이디를 Data Pool에서 불러오기 위해 파일에 저장하여 테스트를 시도하였습니다. 1. 대량 테스트 아이디(1만개 이상)를 불러오는 더 효과적인 방법 2. 만일 Data Pool(외부파일 사이즈) 용량이 문제라면 여러개로 분리하면 효과적인지? 일단 Agent 적정 수량 판단하여 Agent 수량을 늘리는 방향으로 진행해보도록 하겠습니다. 바쁘신데 답변 감사 드립니다. |
Administrator
|
1만개정도의 ID 정도면 @BeforeProcess 구문에서만 로딩하시면 큰 문제 없어 보입니다. 아이디 하나당 20byte 를 치더라도 20KB 밖에 않될테니까요. 한개의 에이전트당 프로세스가 최대 20개가 잡히므로, 하나의 에이전트에서 아이디로 소요되는 메모리는 400KB 밖에 않될것입니다. 궃이 분리가 필요 없을것 같습니다. 2014년 3월 17일 오전 10:16, mulder [via ngrinder] <[hidden email]>님이 작성: 답변 감사합니다. |
Free forum by Nabble | Edit this page |