ERROR Java heap space 질문입니다.

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

ERROR Java heap space 질문입니다.

pengun
안녕하세요.

100메가 테스트인 경우에는 어느정도 vUser 100이상도 문제 없었는데.
대용량(1기가) 다운로드에 대한 테스트를 진행중 heap sapce 에러에 대해 문의합니다.

java 버전은 agnet, controller 모두 아래와 같습니다.
$ java -version
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)

agent 설정은 agent.limit_xmx=false로 준 상태입니다.

테스트 스크립트 그루비 스크립트 코드로 짰고
@BeforeThread, @BeforeProcess에서는 메모리를 먹을만한 특별한 동작을 하지않고

@Test 부분에서는
HTTPResponse response
request.GET( obejctUrl, null, token)
로 다운로드 받습니다.

agent 메모리가 20기가 넘는 상태이며
동작중에 top으로 살펴보면 free memory도 여유 있습니다.

5agent 4process 1thread
agent 에러를 보면 이렇습니다.

java '-javaagent:../../../../ngrinder-agent/lib/grinder-dcr-agent-3.9.1.jar' '-Dparam=1024' '-Djna.library.path=/home/kinx/.ngrinder_agent/file-store/admin/current/lib' '-Dpython.path=/home/kinx/.ngrinder_agent/file-store/admin/current/lib' '-Dpython.cachedir=/tmp/jython' '-Dngrinder.etc.hosts=xxx.client4:127.0.0.1,localhost:127.0.0.1,xxx.proxy1.com:121.78.191.61,xxx.proxy2.com:121.78.191.62,xxx.snode1.com:121.78.191.71,xxx.snode2.com:121.78.191.72,xxx.snode3.com:121.78.191.73,xxx.snode4.com:121.78.191.74,xxx.snode5.com:121.78.191.75' '-Dsun.net.spi.nameservice.provider.1=dns,LocalManagedDns' '-Xms7896m' '-Xmx7896m' '-XX:PermSize=128m' '-XX:MaxPermSize=128m' -classpath '../../../../ngrinder-agent/lib/ngrinder-runtime-3.3.jar:../../../../ngrinder-agent/lib/grinder-patch-3.9.1-patch.jar:.:../../../../ngrinder-agent/lib/ngrinder-groovy-3.3.jar:../../../../ngrinder-agent/lib/dnsjava-2.1.1.jar:../../../../ngrinder-agent/lib/asm-3.3.1.jar:../../../../ngrinder-agent/lib/picocontainer-2.13.6.jar:../../../../ngrinder-agent/lib/slf4j-api-1.6.4.jar:../../../../ngrinder-agent/lib/commons-io-2.0.1.jar:../../../../ngrinder-agent/lib/json-20090211.jar:../../../../ngrinder-agent/lib/grinder-httpclient-3.9.1.jar:../../../../ngrinder-agent/lib/junit-dep-4.8.2.jar:../../../../ngrinder-agent/lib/commons-lang-2.6.jar:../../../../ngrinder-agent/lib/hamcrest-all-1.1.jar:../../../../ngrinder-agent/lib/groovy-all-2.2.1.jar:../../../../ngrinder-agent/lib/grinder-dcr-agent-3.9.1.jar:../../../../ngrinder-agent/lib/grinder-core-3.9.1.jar:../../../../ngrinder-agent/lib/logback-classic-1.0.0.jar:../../../../ngrinder-agent/lib/grinder-http-3.9.1.jar:../../../../ngrinder-agent/lib/logback-core-1.0.0.jar:../../../../ngrinder-agent/lib/ngrinder-runtime-3.3.jar' net.grinder.engine.process.WorkerProcessEntryPoint

2014-09-11 16:47:45,940 INFO  The Grinder version 3.9.1
2014-09-11 16:47:45,945 INFO  Java(TM) SE Runtime Environment 1.7.0_60-b19: Java HotSpot(TM) 64-Bit Server VM (24.60-b09, mixed mode) on Linux amd64 3.13.0-24-generic
2014-09-11 16:47:45,949 INFO  time zone is KST (+0900)
2014-09-11 16:47:46,059 INFO  worker process 0 of agent number 0
2014-09-11 16:47:46,081 INFO  Instrumentation agents: byte code transforming instrumenter for Java; byte code transforming instrumenter for Java
2014-09-11 16:47:47,320 INFO  registered plug-in net.grinder.plugin.http.HTTPPlugin
2014-09-11 16:47:47,447 INFO  Running "ST_119_Down.groovy" using GroovyScriptEngine running with groovy version: 2.2.1
2014-09-11 16:47:47,492 INFO  starting, will run forever
2014-09-11 16:47:47,492 INFO  Start time is 1410421667492 ms since Epoch
2014-09-11 16:47:55,312 INFO  http://xxx.test.net/v1/nGrinder_Down/dummy_1024_0_0_0 -> 200 OK, 1073741824 bytes
2014-09-11 16:48:02,901 INFO  http://xxx.test.net/v1/nGrinder_Down/dummy_1024_0_0_0 -> 200 OK, 1073741824 bytes
2014-09-11 16:48:11,013 INFO  http://xxx.test.net/v1/nGrinder_Down/dummy_1024_0_0_0 -> 200 OK, 1073741824 bytes
2014-09-11 16:48:18,980 INFO  http://xxx.test.net/v1/nGrinder_Down/dummy_1024_0_0_0 -> 200 OK, 1073741824 bytes
2014-09-11 16:48:26,809 INFO  http://xxx.test.net/v1/nGrinder_Down/dummy_1024_0_0_0 -> 200 OK, 1073741824 bytes
2014-09-11 16:48:34,464 INFO  http://xxx.test.net/v1/nGrinder_Down/dummy_1024_0_0_0 -> 200 OK, 1073741824 bytes

2014-09-11 16:48:35,213 ERROR Java heap space
java.lang.OutOfMemoryError: Java heap space
        at HTTPClient.HTTPResponse.readResponseData(HTTPResponse.java:981) ~[grinder-httpclient-3.9.1.jar:na]
        at HTTPClient.HTTPResponse.getData(HTTPResponse.java:515) ~[grinder-httpclient-3.9.1.jar:na]
        at net.grinder.plugin.http.HTTPRequest$AbstractRequest.getHTTPResponse(HTTPRequest.java:1290) ~[grinder-http-3.9.1.jar:na]
        at net.grinder.plugin.http.HTTPRequest.GET(HTTPRequest.java:499) ~[grinder-http-3.9.1.jar:na]
        at net.grinder.plugin.http.HTTPRequest$GET.call(Unknown Source) ~[na:na]
        at ST_119_Down.getSwift(ST_119_Down.groovy:148) ~[na:na]
        at ST_119_Down$getSwift.callCurrent(Unknown Source) ~[na:na]
        at ST_119_Down.test(ST_119_Down.groovy:94) ~[na:na]
        at net.grinder.scriptengine.groovy.junit.GrinderRunner.run(GrinderRunner.java:170) ~[ngrinder-groovy-3.3.jar:na]
        at net.grinder.scriptengine.groovy.GroovyScriptEngine$GroovyWorkerRunnable.run(GroovyScriptEngine.java:148) ~[ngrinder-groovy-3.3.jar:na]
        at net.grinder.engine.process.GrinderThread.run(GrinderThread.java:118) ~[grinder-core-3.9.1.jar:na]


2014-09-11 16:48:42,894 INFO  http://xxx.test.net/v1/nGrinder_Down/dummy_1024_0_0_0 -> 200 OK, 1073741824 bytes
2014-09-11 16:48:45,618 INFO  received a stop message
2014-09-11 16:48:47,695 INFO  received a stop message
2014-09-11 16:48:50,697 INFO  received a stop message
2014-09-11 16:48:50,799 INFO  communication shut down
Reply | Threaded
Open this post in threaded view
|

Re: ERROR Java heap space 질문입니다.

junoyoon
Administrator
ngrinder 에이전트는 프로세스별로 최대 1G 의 메모리만을 사용하도록 기본 설정되어 있습니다.
이는 GC로 인한 Stop the World 현상을 최소화 하기 위한 조치이며,
이를 해결하기 위해서는 다음과 같은 두가지 방법이 있습니다.

1. request.GET 을 하는 시점에 모든 데이터를 읽어오지 않게 하고, 버퍼 사이즈만큼 반복하여 읽도록 한다.
   * http://www.cubrid.org/wiki_ngrinder/entry/how-to-handle-the-big-response 에 관현한 내용이 있습니다.
2. 1G 메모리 한계를 해제한다.
   * 에이전트가 설치된 서버에 .ngrinder_agent/agent.conf 를 여시고
     agent.limit_xmx=false 로 설정해 주세요.
     그러면 현재 메모리가 20G 이고, 프로세스를 2개를 돌리시는 경우, 에이전트는 10G 씩 메모리를 사용하게 됩니다.