본문 바로가기

WAS/WebLogic

[weblogic] too many open files 에러 조치 (Linux, Unix 환경)

(참고한 블로그 글)

https://ls-altr.tistory.com/8

https://wildeveloperetrain.tistory.com/m/318

https://joonyon.tistory.com/entry/Linux-5%EB%B6%84%EC%9D%B4%EB%A9%B4-%EA%B0%80%EB%8A%A5-ulimit-%ED%99%95%EC%9D%B8-%EB%B0%8F-%EC%84%A4%EC%A0%95-%EB%B0%A9%EB%B2%95feat-open-files

 

(참고한 Oracle 문서)

Too Many Open Files Error Even Though Limits File Has Been Set to Unlimited Open Files In Linux Environment

(Doc ID 2135125.1)

 


 

<too many open files 에러>

Linux, Unix 환경에서 발생하는 에러.

file descriptor 용량 제한에 도달하여 더 이상의 파일 open이 불가능한 상황.

 

file descriptor 용량 제한과 관련된 옵션으로 soft limit과 hard limit 두가지가 존재한다.

soft limit 값을 초과하였을 경우에는 경고 메시지만 출력되지만,

hard limit 값을 초과하였을 시에는 실제로 더 이상의 파일 open이 불가능해진다.

 

해당 글은 ulimit 설정을 unlimited로 변경하여 조치하는 방법을 기준으로 작성하였다. (open 개수 무제한)

불필요한 file open 개수를 줄이도록 소스코드를 수정하는 것이 근본적인 문제 해결 방법이긴 하다.

 


 

<AIX 환경 사용 시 유의사항>

AIX 환경에서 ulimit 설정값을 unlimited로 설정하였음에도

실제 weblogic 프로세스의 file descriptor 용량 제한 값은 4096으로 되어있는 경우에는

{WEBLOGIC_HOME}/oracle_common/common/bin/commBaseEnv.sh 스크립트를 수정해야 한다.

(해당 스크립트에 강제로 ulimit 값을 4096으로 설정하는 내용이 포함되어 있다)

 


 

<Linux 환경 점검>

RHEL8 환경에서 테스트 진행하였음

 

#01

/etc/security/limits.conf 파일을 확인한다.

weblogic을 실행할 유저 대상으로 soft 및 hard limit 값을 unlimited로 설정한다.

 

#02.

ulimit -aS 명령어를 실행하여 soft limit 값을 확인한다.

open files 항목을 확인한다.

unlimited로 설정되어 있다면 OS에서 최대로 할당 가능한 값이 출력된다.

 

#03.

ulimit -aH 명령어를 실행하여 hard limit 값을 확인한다.

open files 항목을 확인한다.

unlimited로 설정되어 있다면 OS에서 최대로 할당 가능한 값이 출력된다.

 

#04.

위의 설정 점검 완료 후에 weblogic 프로세스를 재시작한다.

prlimit 명령어를 사용하여

실제 weblogic 프로세스의 file descriptor 용량 제한을 확인할 수 있다.

(명령어)
prlimit --nofile --pid 프로세스번호

 


 

<Unix 환경 점검>

AIX7.2 환경에서 테스트 진행하였음

 

#01

/etc/security/limits 파일을 확인한다.

weblogic을 실행할 유저 대상으로 nofiles 값을 -1로 설정한다.

-1 값이 unlimited와 동일하다.

 

#02.

ulimit -aS 명령어를 실행하여 soft limit 값을 확인한다.

nofiles 항목을 확인한다.

 

#03.

ulimit -aH 명령어를 실행하여 hard limit 값을 확인한다.

nofiles 항목을 확인한다.

 

#04.

위의 설정 점검 완료 후에 weblogic 프로세스를 재시작한다.

procfiles 명령어를 사용하여

실제 weblogic 프로세스의 file descriptor 용량 제한을 확인할 수 있다.

unlimited로 설정되어 있다면 OS에서 최대로 할당 가능한 값이 출력된다.

(명령어)
procfiles -n 프로세스번호

 


 

<실제 weblogic 프로세스의 file descriptor 용량 제한이 4096으로 되어있을 경우>

Linux 환경에서는 weblogic 프로세스가 OS의 ulimit 설정을 올바르게 인식하여

unlimited 설정값으로 기동되었다.

 

그런데 AIX 환경에서는 soft limit과 hard limit 값이 모두 unlimited로 되어있는데도

실제 weblogic 프로세스의  file descriptor 용량 제한은 4096으로 되어있었다.

weblogic이 아닌 다른 java 프로세스는 정상적으로 unlimited 설정값으로 기동되었는데,

weblogic 프로세스만 4096으로 되어있는 상황.

 


 

문제의 원인은 아래 스크립트 때문이었다.

{WEBLOGIC_HOME}/oracle_common/common/bin/commBaseEnv.sh

 

우선 uname 명령어로 OS를 인식 후

file descriptor 용량 제한 설정이 어떻게 되어있는지 체크를 하는 것으로 보인다.

Linux, HP-UX, Solaris 등은 체크 대상에 포함되어 있으나

AIX는 체크 대상에 미포함인 것으로 보인다.

 

 

ulimit -n 4096

해당 명령어로 인해 OS에 설정된 값이 무시되는 것이었다.

 

해당 명령어를 주석 처리하고

ulimit -n unlimited 로 변경하면

weblogic 프로세스의  file descriptor 용량 제한이 unlimited로 기동된다.