본문 바로가기
dev/Spring Boot

JEUS JNI Native Library so 파일 적용기

by NCJ 2024. 5. 16.
728x90
반응형
SMALL
728x90

JEUS 서버에서 JNI 사용 시 발생한 오류에 대해 개인적으로 해결한 방법을 공유합니다. 

리눅스에 JEUS를 설치된 상항에서 JNI Native Library  so파일을 사용하려고 하는데 문제가 발생했습니다.

 

1. java.lang.UnsatisfiedLinkError: no xxx in java.library.path

처음 처음 격은 문제는 java.library.path JNI Native Library 경로를 찾지 못해서 발생한 문제이다.

JEUS Admin -> Server  ->   <Target Server> ->  JVM Option 

-Djava.library.path= '경로' 를 추가해 줬다. 

 

해당 오류를 발생하지 않았지만.. 다음 2번 오류가 발생했다. 

 

2. 동적 오브젝트 파일을 열 수 없습니다: 그런 파일이나 디렉터리가 없습니다. 

처음 해당 오류가 발생하여 경로를 잘못 설정했거나, 권한문제라고 판단했다. 

하지만 경로와 권한은 아무런 문제가 없었다. 

 

보통 JNI Native Library를 사용할 때 리눅스에 경우 LD_LIBRARY_PATH 환경변수 설정을 한다. 

LD_LIBRARY_PATH 경로 설정은 정상적으로  되어 있는데 왜 경로를 못 찾는 것인지... 

 

JEUS 서버 구동시 LD_LIBRARY_PATH 작성 존재여부를 판단하여 로드시점에 넣어

주고 있음을 알게 되었다. 

반응형

즉... JEUS서버 구동 후 환경변수에 LD_LIBRARY_PATH 최초로 작성한 경우..

이미 구동된 JEUS에서 PATH가 정상적으로 적용되지 않는 것 같았다.

JEUS 자체를 내렸다가 올리니깐 오류가 해결되고 정상적으로 JNI Native Library 사용하는데 문제가 없었다. 

 

JEUS 구동시 사전에 LD_LIBRARY_PATH 부분이 환경변수에 작성되어 있다면 발생하지 않는 문제인듯 하다. 

 

3. java.lang.UnsatisfiedLinkError: Native Library XXX.so already loaded in another classloader 

2번 문제를 해결하고 JNI Native Library so 파일을 사용하여 작업하고 재배포 시 위 오류가 발생했다.

발생원인은 하나의 클래스로더에서 로드되고 나면, 다른 클래스로더에서는 불러올 수 없다는 의미이고

JEUS 위에 구동 중인 서버의 애플리케이션만 재배포하는 경우 발생합니다. 

application 배포한 jar, war 경로에 파일만 교체하고 

JEUS Admin ->Server -> <Target Server>  -> Stop

JEUS Admin ->Server -> <Target Server>  -> Start

Target 서버를 내렸다 올려야 서버가 다시 구동되면서 ClassLoader에서 so파일을 정상적으로 로드할 수 있습니다. 

Target 서버에서 이미 로드된 후 어플리케이션만 재배포할 경우 이미 로드된 so 파일을 애플리케이션 클래스로더에서 

다시 로드하려고 하여 발생한 문제였습니다. 

SMALL

정리하기

1. LD_LIBRARY_PATH 설정 후 JEUS 재구동 

   - JEUS 설치 및 구동 전이라면 사전에  LD_LIBRARY_PATH 환경변수를 작성하는 것을 추천

 

2. 애플리케이션 배포 시 Target 서버 재구동

  - 어플리케이션 배포 후 배포파일 경로에 파일만 교체하고 Target 서버 재구동하자.

 

 

끝으로...

위 내용은 개인적으로 JEUS에서 JNI  Native Library 사용 시 격은 문제 및 해결한 방법입니다.

정확한 정보가 아닐 수 있음을 알려드립니다. 

JEUS 버전, 서버환경, 설정, 운영체제 다양한 예외가 있을 수 있습니다. 

그 점 참고해 주시기 바랍니다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
LIST