올라가는 AWS 서버 비용으로 인해 nGrinder 를 로컬 환경에서 진행하기로 했다. 네트워크 환경이 클라우드 환경과는 달라 차이가 있을 수 있지만 부하는 대응하기 위한 테스트를 하기 위해서는 테스트 작업으로 로컬 환경에서 환경을 구성해보기로 했다. ngrinder 에서는 로컬 환경에서 구성 방법과 에러 기록들을 간단히 기록해놓는다. 설치했던 버전은 현재 최신 버전인 ngrinder-controller ver.3.5.9 을 사용했다.
1. ngrinder-controller & ngrinder-agent 설치
[1] download ngrinder-controller
(1) download ngrinder-controller file
- ngrinder github 에 접속해 원하는 버전의 ngrinder-controller.war 파일 설치
- link : https://github.com/naver/ngrinder/releases/tag/ngrinder-3.5.9-20230227
(2) Users/[username]/.ngrinder/system.conf - controller.ip 설정하기
controller.host=127.0.0.1
(3) ngrinder-controller 실행
- Djava.io.tmpdir 을 사용하지 않으면 에러 메세지 출력
- --port : 실행할 port number 설정
java -Djava.io.tmpdir=/Users/Cooper/study/ngrinder/temp -jar ngrinder-controller-3.5.9.war --port=8200
[2] download ngrinder-agent
(1) download ngrinder-agent
- ngrinder-controller 실행 : http://localhost:[port number]
- 우측 상단에 admin > 에이전트 다운로드 를 통해 설치해서 압축 해제하기
tar -xvf ngrinder-agent-3.5.5-localhost.tar
(2) .ngrinder-agent/agent.conf 파일 호스트 설정
- 파일 위치 : /Users/[username]/ngrinder-agent/agent.conf
- 변경 필드 : agent.controller_host
agent.controller_host=127.0.0.1
(3) ngrinder-agent 실행
- 압축 해제 안 파일 필드로 선언된 run_agent.sh 실행
정상 동작 테스트
- script 에 http://127.0.0.1 을 추가해서 스크립트에서 verify 테스트
- 실제 테스트 실행해서 agent 도 정상 동작하는지 확인하기
- smoke test 와 같이 기본 동작이 정상적으로 되는지 확인해보기
- VUser 1 = 1 process * 1 thread
- smoke test 와 같이 기본 동작이 정상적으로 되는지 확인해보기
스크립트
import static net.grinder.script.Grinder.grinder
import static org.junit.Assert.*
import static org.hamcrest.Matchers.*
import net.grinder.script.GTest
import net.grinder.script.Grinder
import net.grinder.scriptengine.groovy.junit.GrinderRunner
import net.grinder.scriptengine.groovy.junit.annotation.BeforeProcess
import net.grinder.scriptengine.groovy.junit.annotation.BeforeThread
// import static net.grinder.util.GrinderUtils.* // You can use this if you're using nGrinder after 3.2.3
import org.junit.Before
import org.junit.BeforeClass
import org.junit.Test
import org.junit.runner.RunWith
import org.ngrinder.http.HTTPRequest
import org.ngrinder.http.HTTPRequestControl
import org.ngrinder.http.HTTPResponse
import org.ngrinder.http.cookie.Cookie
import org.ngrinder.http.cookie.CookieManager
/**
* A simple example using the HTTP plugin that shows the retrieval of a single page via HTTP.
*
* This script is automatically generated by ngrinder.
*
* @author admin
*/
@RunWith(GrinderRunner)
class TestRunner {
public static GTest test
public static HTTPRequest request
public static Map<String, String> headers = [:]
public static Map<String, Object> params = [:]
public static List<Cookie> cookies = []
@BeforeProcess
public static void beforeProcess() {
HTTPRequestControl.setConnectionTimeout(300000)
test = new GTest(1, "Test1")
request = new HTTPRequest()
grinder.logger.info("before process.")
}
@BeforeThread
public void beforeThread() {
test.record(this, "test")
grinder.statistics.delayReports = true
grinder.logger.info("before thread.")
}
@Before
public void before() {
request.setHeaders(headers)
CookieManager.addCookies(cookies)
grinder.logger.info("before. init headers and cookies")
}
@Test
public void test() {
HTTPResponse response = request.GET("http://127.0.0.1:8080", params)
if (response.statusCode == 301 || response.statusCode == 302) {
grinder.logger.warn("Warning. The response may not be correct. The response code was {}.", response.statusCode)
} else {
assertThat(response.statusCode, is(200))
}
}
}
2. 설치 과정에서 만났던 에러 기록 🚨
1. ~/.ngrinder-agent/agent.conf 에서 host 미설정으로 인해 발생한 Setting of DNS provider failed 에러
- 만약 테스트 실행 시 에러 로그에 이와 같은 내용이 발생하면 ~/.ngrinder-agent/agent.conf 파일 변경하면 된다!
2024-03-29 02:47:01,707 ERROR Error running worker process
net.grinder.engine.common.EngineException: Setting of Local DNS provider failed
at net.grinder.engine.process.GrinderProcess.<init>(GrinderProcess.java:154)
at net.grinder.engine.process.WorkerProcessEntryPoint.run(WorkerProcessEntryPoint.java:78)
at net.grinder.engine.process.WorkerProcessEntryPoint.main(WorkerProcessEntryPoint.java:60)
Caused by: java.lang.ClassNotFoundException: sun.net.spi.nameservice.NameService
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:421)
at java.base/java.lang.Class.forName(Class.java:412)
at org.ngrinder.dns.NameServiceProxy.set(NameServiceProxy.java:59)
at net.grinder.engine.process.GrinderProcess.<init>(GrinderProcess.java:151)
... 2 common frames omitted
agent.controller_host=127.0.0.1
2. ~/.ngrinder/system.conf 에서 ip 미설정으로 인해 발생한 Setting of DNS provider failed 에러
- 스크립트 실행 시, Setting of DNS provider failed 에러가 발생하면 해당 경로로 가서 설정 변경하자!
- 혹시 아래와 같은 설정이 되어도 같은 현상이 반복된다면 java version 을 확인해보자. (java version = 1.8 or 11)
2024-03-29 02:47:01,707 ERROR Error running worker process
net.grinder.engine.common.EngineException: Setting of Local DNS provider failed
at net.grinder.engine.process.GrinderProcess.<init>(GrinderProcess.java:154)
at net.grinder.engine.process.WorkerProcessEntryPoint.run(WorkerProcessEntryPoint.java:78)
at net.grinder.engine.process.WorkerProcessEntryPoint.main(WorkerProcessEntryPoint.java:60)
Caused by: java.lang.ClassNotFoundException: sun.net.spi.nameservice.NameService
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:421)
at java.base/java.lang.Class.forName(Class.java:412)
at org.ngrinder.dns.NameServiceProxy.set(NameServiceProxy.java:59)
at net.grinder.engine.process.GrinderProcess.<init>(GrinderProcess.java:151)
... 2 common frames omitted
controller.host=127.0.0.1
3. controller 실행 시, Djava.io.tmpdir 옵션 추가하라는 에러
- controller 를 실행할 때 아래와 같은 메세지를 본다면 쿨하게 Djava.io.tmpdis 을 추가해주도록 하자.
ERROR
Please set `java.io.tmpdir` property like following. tmpdir should be different from the OS default tmpdir.
`java -Djava.io.tmpdir=${NGRINDER_HOME}/lib -jar ngrinder-controller.war`
java -Djava.io.tmpdir=/Users/Cooper/study/ngrinder/temp -jar
4. 그리고 만약 실행하고픈 프로젝트가 java version > 11 이라면 ?
ngrinder 는 3.5.9 버전 기준으로 Java 11 까지 지원한다. 만약 실행하고 싶은 프로젝트가 맥을 사용한다면 사용하고 싶은 Java version 의 bin 파일을 이용해서 실행해보자. (인텔리제이를 사용해서 그런걸 수도?)
- 기준 경로 : /Users/[username]/Library/Java/JavaVirtualMachines/[자바 버전]/Contents/Home/bin/java
- 예시 : /Users/[username]/Library/Java/JavaVirtualMachines/openjdk-21/Contents/Home/bin/java
실행 명령어
/Users/cooper/Library/Java/JavaVirtualMachines/openjdk-21/Contents/Home/bin/java -jar \
-javaagent:/Users/cooper/Cooper/study/pinpoint/pinpoint-agent-2.5.3/pinpoint-bootstrap-2.5.3.jar \
-Dpinpoint.agentId=member-api \
-Dpinpoint.applicationName=member-api \
-Dspring.profiles.active=local \
-Dpinpoint.config=/Users/cooper/Cooper/study/pinpoint/pinpoint-agent-2.5.3/pinpoint-root.config \
/Users/cooper/Cooper/study/infra-workshop/member/build/libs/member-0.0.1-SNAPSHOT.jar
'인프라 공방 > summary' 카테고리의 다른 글
nGrinder tutorial (0) | 2024.03.19 |
---|---|
pinpoint simple summary (0) | 2024.03.08 |
[인프라공방] HTTP Cache (0) | 2024.02.28 |