SERVER_CLOUD

AWS EC2 서버 재시작 후 발생한 'java: error while loading shared libraries: libjli.so' 오류 해결 방법

멱군 2024. 8. 21. 12:04

클라우드에서 서버를 운영하다 보면 정말 다양한 일이 벌어지죠? 특히 AWS EC2를 사용하다 보면 생각지도 못한 문제가 발생하기 마련입니다. 이번에 갑자기 서버가 업데이트하고 재시작했더니, 운영중이던 자바서버가 값자기 접속이 안되더라구요. "java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory"라는 오류 메시지를 마주했을 때의 당황스러움이란... 이번 포스팅에서는 저와 같은 문제를 겪는 분들을 위해, 제가 어떻게 이 문제를 해결했는지 함께 해결과정을 따라가보도록 하겠습니다.

 

 

1. 문제 발생: 서버 재시작 후 Java 경로 오류

서버를 업데이트하고 재시작한 후, Java 기반 애플리케이션을 실행하려고 했습니다.

java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory 메세지

그러나 예상치 못한 오류 메시지가 나타났습니다.

"java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory".

이는 Java 설치가 손상되었거나, 환경 변수가 올바르게 설정되지 않아 발생한 문제였습니다.

서버가 정상적으로 운영되기 위해서는 이 문제를 해결해야 했습니다.

 

2. 초기 시도: Java 재설치

문제를 해결하기 위해 가장 먼저 시도한 것은 Java를 재설치하는 것이었습니다.

sudo apt-get install openjdk-8-jdk 명령어를 사용하여 Java를 다시 설치하려 했습니다.

그러나 "이미 설치되어 있습니다"라는 메시지가 나왔고, 이는 실제로 Java가 설치되어 있지만 경로 설정이 올바르지 않다는 것을 의미했습니다.

 

3. 경로 확인

Java 설치 경로를 확인하기 위해 다음 명령어를 사용했습니다:

sudo update-alternatives --config java

ubuntu 서버에 설치된 자바 목록

이를 통해 /usr/lib/jvm/java-8-openjdk-amd64 경로에 Java가 설치된 것을 확인할 수 있었습니다.

또한 구성도 java8을 사용한다고 표기가 되어있습니다.

그러나 환경 변수가 올바르게 설정되지 않아 Java가 제대로 인식되지 않고 있었습니다.

 

4. 경로 재확인

그러나 java -version을 해도 여전히 libjli.so 파일을 찾지 못해 문제가 발생한 것입니다.

libjli.so 파일의 정확한 위치를 다시 확인하기 위해 아래의 명령어를 실행했습니다.

find /usr/lib/jvm/java-8-openjdk-amd64 -name libjli.so

find /usr/lib/jvm/java-8-openjdk-amd64 -name libjli.so 명령어 결과

이 명령어를 통해 두개의 경로가 나오는걸 확인 할수 있었습니다. 둘중에서 하나만 사용해도 됩니다.

저는 /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/jli/libjli.so와 같은 경로에 libjli.so 파일을 사용하기로 했습니다.

처음 설정한 경로와 다른게 문제의 원인이였던거 같습니다. 

업데이트 하면서 설정이 바꼈나봐요. -.-

 

5. 환경 변수 재설정

이제 문제의 원인을 확인했으니 Java가 올바르게 작동하도록 하기 위해 환경 변수를 다시 설정하기로 했습니다.

다음 명령어를 사용하여 JAVA_HOME, PATH, 그리고 LD_LIBRARY_PATH를 재설정했습니다.

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64/jli:$LD_LIBRARY_PATH

이 명령어들은 Java의 홈 디렉터리와 실행 파일 경로를 설정하고, 필요한 라이브러리를 찾을 수 있도록 LD_LIBRARY_PATH를 구성하는 역할을 합니다.

 

6. 영구적인 설정 적용

환경 변수를 재설정 한 다음, 이 설정들이 서버 재시작 후에도 유지되도록 `.bashrc` 파일에 추가했습니다.

echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/jli:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

이렇게 하면 서버가 다시 시작되더라도 환경 변수가 올바르게 유지되어 Java가 정상적으로 작동하게 됩니다.

 

7. 문제 해결 확인

모든 설정을 마친 후, java -version 명령어를 사용하여 Java가 정상적으로 작동하는지 확인했습니다.

java -version 경로 성공메세지

Java 버전이 정상적으로 출력되었고, 애플리케이션도 무사히 실행되는 것을 확인했습니다. 이러한 과정을 통해 문제를 성공적으로 해결할 수 있었습니다.

 

결론

AWS EC2에서 서버를 운영할 때, 특히 서버 재시작이나 업데이트 후 발생할 수 있는 Java 관련 오류는 자주 발생할 수 있는 문제입니다. 이번 글에서는 서버 재시작 후 발생한 "libjli.so" 오류를 해결하기 위해 Java 경로를 재설정하고 환경 변수를 올바르게 구성하는 방법을 공유해드렸는데 도움이 되셨나요? 문제가 발생했을 때 당황하지 말고, 경로를 다시 확인하고 필요한 설정을 재구성하면 문제를 해결할 수 있습니다.