애플리케이션에 대해 소프트 제한이 설정되지 않았습니다. [ulimit]

애플리케이션에 대해 소프트 제한이 설정되지 않았습니다. [ulimit]

내 응용 프로그램의 최대 열린 파일 수를 늘리려고 하는데 실패했습니다. 하드 제한은 올바르게 설정되었지만 소프트 제한은 기본값인 1024로 유지됩니다.

start() 함수 아래에 /etc/init.d/[application]다른 명령을 실행하기 전에 다음 두 줄이 있습니다.

ulimit -Sn 64512 2> /dev/null
ulimit -Hn 80896 2> /dev/null

그런데 아래의 제한을 확인해 보니 /proc/[pid]/limits하드 제한은 80896인데 소프트 제한은 1024입니다.

/etc/security/limits.d/응용 프로그램이 루트로 실행되므로 아래 항목이 포함된 새 .conf 파일을 추가했습니다 .

root    soft    nofile    64512
root    hard    nofile    80896

하지만 아무것도 변하지 않습니다 /proc/[pid]/limits.

특정 애플리케이션에 대한 최대 열린 파일 제한을 영구적으로 설정하는 방법은 무엇입니까?

RHEL 6.10에서 테스트 중입니다.

답변1

사용자 및 ulimit 프로세스의 일부 매개변수를 읽은 후(여기) 및 @binarysta의 의견을 읽고 ulimit 매뉴얼 페이지를 계속해서 읽으면서 init.d 방법이 작동하지만 잘못된 순서로 수행하고 있음을 깨달았습니다. 하드 제한은 사용자가 자신의 소프트 제한을 늘릴 수 있는 절대 최대값이므로 실행 시 하드 제한보다 큰 경우 먼저 설정된 소프트 제한은 무시됩니다.

그러니 이렇게 하지 마세요:

root    soft    nofile    64512
root    hard    nofile    80896

당신은 이것을 해야 합니다:

root    hard    nofile    80896
root    soft    nofile    64512

다시 한 번 주문이 중요합니다.

그래서 /etc/init.d/[application]:

start() {
ulimit -Hn 80896 2> /dev/null
ulimit -Sn 64512 2> /dev/null
[rest of start function]
}

restart() {
# only if restart() function does not call start()
ulimit -Hn 80896 2> /dev/null
ulimit -Sn 64512 2> /dev/null
[rest of restart function]
}

다른 사람이 같은 문제에 직면할 경우를 대비해 이 질문/답변을 남겨주세요.

관련 정보