안녕하세요
ngrinder 3.1 버전 사용하고 있는데요 테스트 중 Java heap 에러가 발생하여서 메모리 설정을 이것저것 해 보았는데 적용이 제대로 되지 않는거 같아서 문의 드립니다. 에러 내용은 아래와 같습니다. 2013-02-13 10:36:14,533 ERROR Aborted run: Java exception calling TestRunner net.grinder.scriptengine.jython.JythonScriptExecutionException: Java exception calling TestRunner File "/root/.ngrinder_agent/file-store/current/get_100MB.py", line 35, in __call__ 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(HTTPRequest.java:445) ~[grinder-http-3.9.1.jar:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.6.0_06] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) ~[na:1.6.0_06] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[na:1.6.0_06] at java.lang.reflect.Method.invoke(Method.java:597) ~[na:1.6.0_06] at org.python.core.PyReflectedFunction.__call__(Unknown Source) ~[jython-2.2.1.jar:na] at org.python.core.PyMethod.__call__(Unknown Source) ~[jython-2.2.1.jar:na] at org.python.core.PyObject.__call__(Unknown Source) ~[jython-2.2.1.jar:na] at org.python.core.PyInstance.invoke(Unknown Source) ~[jython-2.2.1.jar:na] at net.grinder.scriptengine.jython.instrumentation.traditional.InstrumentedPyJavaInstanceForJavaInstances.access$101(InstrumentedPyJavaInstanceForJavaInstances.java:43) ~[grinder-core-3.9.1.jar:na] at net.grinder.scriptengine.jython.instrumentation.traditional.InstrumentedPyJavaInstanceForJavaInstances$2.call(InstrumentedPyJavaInstanceForJavaInstances.java:70) ~[grinder-core-3.9.1.jar:na] at net.grinder.scriptengine.jython.instrumentation.traditional.PyDispatcher.dispatch(PyDispatcher.java:70) ~[grinder-core-3.9.1.jar:na] at net.grinder.scriptengine.jython.instrumentation.traditional.InstrumentationHelper.dispatch(InstrumentationHelper.java:101) ~[grinder-core-3.9.1.jar:na] at net.grinder.scriptengine.jython.instrumentation.traditional.InstrumentedPyJavaInstanceForJavaInstances.invoke(InstrumentedPyJavaInstanceForJavaInstances.java:67) ~[grinder-core-3.9.1.jar:na] at org.python.pycode._pyx1.__call__$4(/root/.ngrinder_agent/file-store/current/get_100MB.py:35) ~[na:na] at org.python.pycode._pyx1.call_function(/root/.ngrinder_agent/file-store/current/get_100MB.py) ~[na:na] at org.python.core.PyTableCode.call(Unknown Source) ~[jython-2.2.1.jar:na] at org.python.core.PyTableCode.call(Unknown Source) ~[jython-2.2.1.jar:na] at org.python.core.PyTableCode.call(Unknown Source) ~[jython-2.2.1.jar:na] at org.python.core.PyFunction.__call__(Unknown Source) ~[jython-2.2.1.jar:na] at org.python.core.PyMethod.__call__(Unknown Source) ~[jython-2.2.1.jar:na] at org.python.core.PyObject.invoke(Unknown Source) ~[jython-2.2.1.jar:na] at org.python.core.PyInstance.__call__(Unknown Source) ~[jython-2.2.1.jar:na] at org.python.core.PyObject.__call__(Unknown Source) ~[jython-2.2.1.jar:na] at net.grinder.scriptengine.jython.JythonScriptEngine$JythonWorkerRunnable.run(JythonScriptEngine.java:250) ~[grinder-core-3.9.1.jar:na] at net.grinder.engine.process.GrinderThread.run(GrinderThread.java:118) ~[grinder-core-3.9.1.jar:na] at java.lang.Thread.run(Thread.java:619) [na:1.6.0_06] controler에서 catalina.sh 설정을 해보아도 테스트를 진행해보면 (JAVA_OPTS="$JAVA_OPTS -Xms4G -Xmx16G -XX:MaxPermSize=4G") agent에서 Used Memory는 5G를 넘지 못합니다. agent에서도 아래와 run_agent.sh 설정을 아래와 같이 해보았는데 java -Xms2G -Xmx16G -Dstart.mode=agent ${controllerIp} -jar ngrinder-core-3.1.jar -server 역시 실제 사용 메모리는 5G를 넘지 못하고 Java heap 에러가 발생합니다. 각 agent가 설치되어 있는 서버들은 20G이상 메모리를 사용하고 있습니다. root@bench1:~/ngrinder-core-3.1# cat /proc/meminfo MemTotal: 24733732 kB MemFree: 20634900 kB 각 agent들의 메모리 사용량을 증가시키려면 어떤 설정이 필요한지 답변 주시면 감사하겠습니다. |
Administrator
|
쓰레드와 프로세스를 각각 얼마로 잡으셨나요?? 나의 iPhone에서 보냄
|
agent는 총 4대
Process 1, Threads 5 로 설정하였습니다. |
Administrator
|
일단 프로세스 5개 쓰레드 1개로 잡아보시겠어요? 나의 iPhone에서 보냄
|
말씀해주신대로
프로세스 5개 쓰레드 1개로 테스트해보니 문제없이 동작합니다. 프로세스 25개 쓰레드 1개로도 정상 동작합니다. 도움 주셔서 감사합니다. 추가로 쓰레드로는 메모리 할당에 제한이 있는 것 인가요? |
Administrator
|
nGrinder 는 프로세스별로 메모리를 자동으로 잡습니다.
// Make a room with 100MB. long actualFree = new Sigar().getMem().getActualFree() - (100 * 1024 * 1024); // If memory enough.. desirableXmx = actualFree / processCount;
return jvmArguments.append(" -Xms" + getMemorySizeStr(desirableXmx / 2) + "M -Xmx" + getMemorySizeStr(desirableXmx) + "M ");
위와 같이 Xms와 Xmx 를 현재 가용 메모리를 가지고 자동으로 프로세스 별로 최대 메모리를 지정합니다. 그러나 아래 말씀 하신 건과 같이 5G가 밖에 사용하지 못잡는다면, 이 문제는 다른 문제인 듯 합니다. 혹시 에이전트측 JVM 이 32bit 용이 아닌지 확인해 보시기 바랍니다.,
위 명령으로 확인 가능합니다.
-----Original Message----- If you reply to this email, your message will be added to the discussion below:
http://ngrinder.642.n7.nabble.com/-tp289p293.html
To start a new topic under ngrinder-user-kr, email [hidden email]
To unsubscribe from ngrinder-user-kr, click here. NAML |
에이전트가 설치된 서버는 모두 64비트 JVM이 설치되어 있습니다.
root@bench1:~# java -d64 -version java version "1.6.0_06" Java(TM) SE Runtime Environment (build 1.6.0_06-b02) Java HotSpot(TM) 64-Bit Server VM (build 10.0-b22, mixed mode) |
Administrator
|
그렇다면 이 문제는 아닌 듯 보입니다. 현재 스크립트명을 보면 100M까지 Response 를 보내는 듯 한데..
여기서 정말로 메모리 문제가 발생한 듯 하군요. 테스트 실행시 에이전트 콘솔 화면에 다음과 같은 에이전트 로그가 나오게 될 텐데요. 이 메시지를 알려주실 수 있으신가요? 2013-02-13 13:32:28,582 INFO net.grinder.AgentDaemon: jvm arguments -Djava.security.manager=org.ngrinder.sm.NGrinderSecurityManager -Dngrinder.exec.path=C:\Users\junoyoon\.ngrin der_agent\file-store\admin\current -Dngrinder.console.ip=.... -Dngrinder.dns.ip=.... -Dpython.path=C:\Users\junoyoon\.ngrinder_agent\file-store\admin\curr ent\lib -Dpython.cachedir=C:\Users\junoyoon\AppData\Local\Temp\jython -Dngrinder.etc.hosts=JUNOYOON-PC:127.0.0.1,localhost:127.0.0.1,www.naver.com:220.95.233.172,www.naver.com:20 2.131.30.11,10.66.28.121:10.66.28.121 -Dsun.net.spi.nameservice.provider.1=dns,LocalManagedDns -Xms479M -Xmx959M 2013-02-13 13:32:28,585 INFO net.grinder.AgentDaemon: Worker process command line: java '-javaagent:C:\Project\ngrinder_v3\ngrinder-core-3.1.2\lib\grinder-dcr-agent-3.9.1.jar' '-D java.security.manager=org.ngrinder.sm.NGrinderSecurityManager' '-Dngrinder.exec.path=C:\Users\junoyoon\.ngrinder_agent\file-store\admin\current' '-Dngrinder.console.ip=10.66.9.95' '-Dngrinder.dns.ip=10.22.64.6,10.22.64.7' '-Dpython.path=C:\Users\junoyoon\.ngrinder_agent\file-store\admin\current\lib' '-Dpython.cachedir=C:\Users\junoyoon\AppData\Local\Temp\jyt hon' '-Dngrinder.etc.hosts=JUNOYOON-.....' '-Dsun.net.spi.nameservice. provider.1=dns,LocalManagedDns' '-Xms479M' '-Xmx959M' -classpath 'C:\Project\ngrinder_v3\ngrinder-core-3.1.2\lib\ngrinder-dns-3.1.2.jar;.;C:\Project\ngrinder_v3\ngrinder-core-3.1.2 \lib\grinder-3.9.1-patch.jar;C:\Project\ngrinder_v3\ngrinder-core-3.1.2\lib\asm-3.2.jar;C:\Project\ngrinder_v3\ngrinder-core-3.1.2\lib\dnsjava-2.1.1.jar;C:\Project\ngrinder_v3\ngri nder-core-3.1.2\lib\grinder-3.9.1.jar;C:\Project\ngrinder_v3\ngrinder-core-3.1.2\lib\grinder-core-3.9.1.jar;C:\Project\ngrinder_v3\ngrinder-core-3.1.2\lib\grinder-dcr-agent-3.9.1.j ar;C:\Project\ngrinder_v3\ngrinder-core-3.1.2\lib\grinder-http-3.9.1.jar;C:\Project\ngrinder_v3\ngrinder-core-3.1.2\lib\grinder-httpclient-3.9.1.jar;C:\Project\ngrinder_v3\ngrinder -core-3.1.2\lib\grinder-xmlbeans-3.9.1.jar;C:\Project\ngrinder_v3\ngrinder-core-3.1.2\lib\json-20090211.jar;C:\Project\ngrinder_v3\ngrinder-core-3.1.2\lib\jsr173-1.0.jar;C:\Project \ngrinder_v3\ngrinder-core-3.1.2\lib\jython-standalone-2.5.3.jar;C:\Project\ngrinder_v3\ngrinder-core-3.1.2\lib\logback-classic-1.0.0.jar;C:\Project\ngrinder_v3\ngrinder-core-3.1.2 \lib\logback-core-1.0.0.jar;C:\Project\ngrinder_v3\ngrinder-core-3.1.2\lib\ngrinder-dns-3.1.2.jar;C:\Project\ngrinder_v3\ngrinder-core-3.1.2\lib\picocontainer-2.13.6.jar;C:\Project \ngrinder_v3\ngrinder-core-3.1.2\lib\slf4j-api-1.6.4.jar;C:\Project\ngrinder_v3\ngrinder-core-3.1.2\lib\stax-api-1.0.1.jar;C:\Project\ngrinder_v3\ngrinder-core-3.1.2\lib\xmlbeans-2 .5.0.jar' net.grinder.engine.process.WorkerProcessEntryPoint -Xms479M -Xmx959M 요런 내용이 어떻게 나오는지 확인이 필요합니다. 감사합니다. -----Original Message----- From: "황호동 [via ngrinder]"<ml-node+s642n296h60@n7.nabble.com> To: "junoyoon"<junoyoon@nhn.com>; Cc: Sent: 2013-02-13 (수) 13:24:58 Subject: Re: 메모리 설정 문의 에이전트가 설치된 서버는 모두 64비트 JVM이 설치되어 있습니다. root@bench1:~# java -d64 -version java version "1.6.0_06" Java(TM) SE Runtime Environment (build 1.6.0_06-b02) Java HotSpot(TM) 64-Bit Server VM (build 10.0-b22, mixed mode) If you reply to this email, your message will be added to the discussion below: http://ngrinder.642.n7.nabble.com/-tp289p296.html To start a new topic under ngrinder-user-kr, email ml-node+s642n113h87@n7.nabble.com To unsubscribe from ngrinder-user-kr, click here. NAML |
에이전트 로그 입니다.
로그를 보면 -Xms512M -Xmx1024M 으로 나타납니다. 설정이 되지 않은 것 같은데 어떻게 설정할 수 있을 까요? 2013-02-13 14:16:49,210 INFO agent controller: received a start agent message 2013-02-13 14:16:49,211 INFO agent controller: agent start message is revcieved from console net.grinder.messages.agent.StartGrinderMessage@48cbdb20 2013-02-13 14:16:49,211 INFO agent controller: starting agent... for test_169 2013-02-13 14:16:49,212 INFO net.grinder.AgentDaemon: Agent Daemon Agent conntected to port : 12003 is started. 2013-02-13 14:16:49,215 INFO agent controller: agent started. waiting for agent controller signal 2013-02-13 14:16:49,220 INFO net.grinder.AgentDaemon: The Grinder 3.9.1 2013-02-13 14:16:49,237 INFO net.grinder.AgentDaemon: connected to console at /10.11.133.4:12003 2013-02-13 14:16:49,238 INFO net.grinder.AgentDaemon: waiting for console signal 2013-02-13 14:16:59,211 INFO net.grinder.AgentDaemon: Clearing file store 2013-02-13 14:16:59,216 INFO net.grinder.AgentDaemon: Updating file store: "get_100MB.py" (1598 bytes) 2013-02-13 14:17:04,240 INFO net.grinder.AgentDaemon: Updating file store: "grinder.properties" (595 bytes) 2013-02-13 14:17:09,213 INFO net.grinder.AgentDaemon: Updating file store: "logback-worker.xml" (990 bytes) 2013-02-13 14:17:14,233 INFO net.grinder.AgentDaemon: received a start message 2013-02-13 14:17:14,254 INFO net.grinder.AgentDaemon: grinder properties {grinder.security=false, grinder.test.id=test_169, grinder.reportTimesToConsole=true, grinder.consoleHost=10.11.133.4, grinder.dcrinstrumentation=false, grinder.numberOfOldLogs=1, grinder.sleepTimeVariation=0.2, grinder.logProcessStreams=true, grinder.useConsole=true, grinder.threads=1, grinder.consolePort=12003, grinder.ignoreSampleCount=0, grinder.jvm=java, grinder.duration=900000, grinder.sleepTimeFactor=1, grinder.processIncrement=0, grinder.processes=5, grinder.jvm.classpath=/root/.ngrinder_agent/file-store/current/, ngrinder.etc.hosts=, grinder.logDirectory=/root/.ngrinder_agent/log/test_169, grinder.reportToConsole.interval=500, grinder.debug.singleprocess=false, grinder.script=get_100MB.py, grinder.runs=0} 2013-02-13 14:17:14,254 INFO net.grinder.AgentDaemon: jvm arguments -Dpython.path=/root/.ngrinder_agent/file-store/current/lib -Dpython.home=/root/.ngrinder_agent/file-store/current -Dngrinder.etc.hosts=bench2:127.0.0.1,localhost:127.0.0.1 -Dsun.net.spi.nameservice.provider.1=dns,LocalManagedDns -server -Xms512M -Xmx1024M 2013-02-13 14:17:14,259 INFO net.grinder.AgentDaemon: Worker process command line: java '-javaagent:../../../ngrinder-core-3.1/lib/grinder-dcr-agent-3.9.1.jar' '-Dpython.path=/root/.ngrinder_agent/file-store/current/lib' '-Dpython.home=/root/.ngrinder_agent/file-store/current' '-Dngrinder.etc.hosts=bench2:127.0.0.1,localhost:127.0.0.1' '-Dsun.net.spi.nameservice.provider.1=dns,LocalManagedDns' -server '-Xms512M' '-Xmx1024M' -classpath '.:../../../ngrinder-core-3.1/lib/grinder-3.9.1-patch.jar:../../../ngrinder-core-3.1/lib/jsr173-1.0.jar:../../../ngrinder-core-3.1/lib/ngrinder-dns-3.1.jar:../../../ngrinder-core-3.1/lib/stax-api-1.0.1.jar:../../../ngrinder-core-3.1/lib/picocontainer-2.13.6.jar:../../../ngrinder-core-3.1/lib/logback-classic-1.0.0.jar:../../../ngrinder-core-3.1/lib/grinder-3.9.1.jar:../../../ngrinder-core-3.1/lib/dnsjava-2.1.1.jar:../../../ngrinder-core-3.1/lib/grinder-http-3.9.1.jar:../../../ngrinder-core-3.1/lib/logback-core-1.0.0.jar:../../../ngrinder-core-3.1/lib/grinder-xmlbeans-3.9.1.jar:../../../ngrinder-core-3.1/lib/asm-3.2.jar:../../../ngrinder-core-3.1/lib/slf4j-api-1.6.4.jar:../../../ngrinder-core-3.1/lib/grinder-httpclient-3.9.1.jar:../../../ngrinder-core-3.1/lib/grinder-core-3.9.1.jar:../../../ngrinder-core-3.1/lib/grinder-dcr-agent-3.9.1.jar:../../../ngrinder-core-3.1/lib/jython-2.2.1.jar:../../../ngrinder-core-3.1/lib/xmlbeans-2.5.0.jar' net.grinder.engine.process.WorkerProcessEntryPoint |
Administrator
|
제가 그쪽 코드를 다시 살펴보니..
if (desirableXmx < (DEFAULT_MIN_XMX_SIZE)) { LOGGER.error("There is very few memory availble {}. It's not enough to run test", actualFree); desirableXmx = DEFAULT_MIN_XMX_SIZE; } else if (desirableXmx > DEFAULT_MAX_XMX_SIZE) { desirableXmx = DEFAULT_MAX_XMX_SIZE; }
와 같이 1024M 를 넘을 경우 1024M로 잡게 해 놓았네요. 그랬던 사유는 1G가 넘어갈 경우, 가비지 콜렉션 타임에 의해, 측정 결과가 왜곡될 수 있기 때문입니다. 일단 금주말이나 차주초에 나올 3.1.2 버전에는 사용자 설정에 따라 메모리를 더 잡을 수 있도록 해놓겠습니다. 그 전까지는 프로세스 개수를 늘리는 방법으로 작업하시면 될것 같습니다.
-----Original Message----- If you reply to this email, your message will be added to the discussion below:
http://ngrinder.642.n7.nabble.com/-tp289p299.html
To start a new topic under ngrinder-user-kr, email [hidden email]
To unsubscribe from ngrinder-user-kr, click here. NAML |
Free forum by Nabble | Edit this page |