ngrinder script validation error 해결을 어떻게 하나요?

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

ngrinder script validation error 해결을 어떻게 하나요?

joonseolee
아래 링크를 통해 controller, agent 를 다운받아 실행을 하는데 에러가 발생합니다.  
script 탭에서 groovy 스크립트로 추가를 하고 validate 체크를 하면 제목과 같이 에러가 발생합니다.  
"script validation error"
문법상 틀린게 없어서 ngrinder 깃헙에서 제공해주는 샘플 스크립트를 추가해줘도 유효성 에러가 발생합니다.  
근데 이상하게도 3.5.5-p1 까지는 유효성이 정상적으로 작동되고 스트레스 테스트도 성공했고
그 이상 버전 즉 3.5.6 이상은 어떤것을 도커로 띄워도 유효성 에러가 발생하는데 혹시 제 환경에서만 발생한건지 알수있을까요?

https://hub.docker.com/r/ngrinder/controller
Reply | Threaded
Open this post in threaded view
|

Re: ngrinder script validation error 해결을 어떻게 하나요?

junoyoon
Administrator
에러 메시지를 좀 자세히 써 주실 수 있을까요?
Reply | Threaded
Open this post in threaded view
|

Re: ngrinder script validation error 해결을 어떻게 하나요?

joonseolee
도커내 로그를 확인하면 아래와 같이 특별한 메시지가 나오고있진않습니다.

```
2023-01-17 05:05:46,751 INFO  LocalScriptTestDriveService.java:115 : grinder.jvm.classpath : /opt/ngrinder-controller/lib/ngrinder-controller-3.5.8.war-spring-boot-libs-e7fc14d0-6b4a-4d0a-8ea4-2b445dda3137/ngrinder-runtime-3.5.8.jar::/opt/ngrinder-controller/lib/ngrinder-controller-3.5.8.war-spring-boot-libs-e7fc14d0-6b4a-4d0a-8ea4-2b445dda3137/grinder-3.9.1-patch.jar::/opt/ngrinder-controller/script/admin
```

브라우저에서 개발자 도구를 확인했을때 웹소켓쪽 이슈로 확인되는 메시지가 나왔습니다.

```
{
  "message" : "Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class org.ngrinder.common.util.SystemInfoUtils",
  "success" : false,
  "stackTrace" : "org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class org.ngrinder.common.util.SystemInfoUtils\n\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n\tat org.ngrinder.security.PluggablePreAuthFilter.doFilter(PluggablePreAuthFilter.java:52)\n\tat org.ngrinder.infra.servlet.PluggableServletFilter.doFilter(PluggableServletFilter.java:61)\n\tat org.ngrinder.security.PluggablePreAuthFilter.doFilter(PluggablePreAuthFilter.java:52)\n\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589)\n\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\nCaused by: java.lang.NoClassDefFoundError: Could not initialize class org.ngrinder.common.util.SystemInfoUtils\n\tat net.grinder.engine.agent.PropertyBuilder.buildJVMArgumentWithoutMemory(PropertyBuilder.java:208)\n\tat net.grinder.engine.agent.LocalScriptTestDriveService.doValidate(LocalScriptTestDriveService.java:131)\n\tat org.ngrinder.script.service.ScriptValidationService.validate(ScriptValidationService.java:117)\n\tat org.ngrinder.script.controller.FileEntryApiController.validate(FileEntryApiController.java:392)\n\t... 7 more\n"
}
```
Reply | Threaded
Open this post in threaded view
|

Re: ngrinder script validation error 해결을 어떻게 하나요?

junoyoon
Administrator
현재 사용하시는 os 가 무엇일까요? SystemInfoUtils 라는 클래스인데, 이게 지원 못하는 os 가 있기도 하고, 저 클래스를 로딩하는데 있어 필요한 파일이 주기적으로 os 에 의해 지워지기도 합니다.
Reply | Threaded
Open this post in threaded view
|

Re: ngrinder script validation error 해결을 어떻게 하나요?

joonseolee
현재 사용하는 os 는 다음과 같습니다.
아무래도 말씀해주신것에 따르면 amazonlinux 를 쓰다보니 그런것같네요..ㅠ
확인해보니 3.5.6 버전이 나온게 3개월전이였고 말씀해주신 SystemInfoUtils 클래스 생성일이 거의 6개월전이니 맞는듯합니다..
자세히 보니 이전에 ngrinder github discussions 에 등록되어있는 이슈랑 동일한걸로 보입니다.
해당 이슈는 아래에 추가해두었습니다.

```
test:~/environment $ cat /etc/*release*
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"
Amazon Linux release 2 (Karoo)
cpe:2.3:o:amazon:amazon_linux:2
```

https://github.com/naver/ngrinder/discussions/942
Reply | Threaded
Open this post in threaded view
|

Re: ngrinder script validation error 해결을 어떻게 하나요?

y_cat
안녕하세요.

저도 k8s 환경에서 ngrinder 3.5.8 이미지로 올려서 테스트해보다가 해당 문제를 동일하게 겪었는데, 코드 상에서 해결한 게 있어서 공유드립니다.

org.ngrinder.common.util.SystemInfoUtils 내부에 oshi 라이브러리를 사용하는 걸 확인해서
oshi 공식 문서에 FAQ를 보니까 해당 문제가 언급된 걸 발견했습니다.
https://github.com/oshi/oshi/blob/master/src/site/markdown/FAQ.md#how-do-i-resolve-jna-noclassdeffounderror-or-nosuchmethoderror-issues

Specify the most recent version of JNA (both jna and jna-platform artifacts) in your pom.xml (For Gradle, build.gradle includes additional options to force the version).

ngrinder-core build.gradle에 oshi-core라는 라이브러리를 최신 버전(6.4.10)으로, net.java.dev.jna 라이브러리도 최신 버전(5.14.0)으로 올린 다음에, JDK 11 환경 이미지 베이스(adoptopenjdk/openjdk11:alpine-jre)로 Docker 이미지를 새로 만들었습니다.

helm으로 배포한 후에 Controller에서 스크립트 검증해보니까 정상 작동 확인했습니다.