실행 중인 프로세스의 리소스 제한 변경(ulimit/rlimit)

실행 중인 프로세스의 리소스 제한 변경(ulimit/rlimit)

최대 열린 파일 수와 같은 리소스 제한에 도달한 장기 실행 프로세스가 있습니다.

나는 그것을 죽이고 싶지 않습니다.

일반적으로 다음을 수행합니다.

(stop service)
ulimit -n <new limit>
(start service)

서비스를 중지하고 시작하고 한도를 늘리는 것을 방지할 수 있는 방법이 있습니까?

답변1

나는 그것을 알아 냈습니다.

일부 커널(예: 2.6.32+), 적어도 CentOS/RHEL에서는 를 사용하여 실행 중인 프로세스의 리소스 제한을 변경할 수 있습니다 /proc/<pid>/limits. 예를 들면 다음과 같습니다.

$ grep "open files" /proc/23052/limits
Limit                     Soft Limit           Hard Limit           Units     
Max open files            1024                 4096                 files     

최대 열린 파일 수를 소프트 제한 4096 및 하드 제한 8192로 변경하려면 다음을 수행하세요.

echo -n "Max open files=4096:8192" > /proc/23052/limits

이는 다음을 제공합니다:

$ grep "open files" /proc/23052/limits
Limit                     Soft Limit           Hard Limit           Units     
Max open files            4096                 8192                 files

주의 -n하세요echo -ninvalid argument- 이것이 없으면 " " 오류가 발생합니다 .

위의 방법이 항상 작동하는 것은 아니므로

또 다른 옵션은prlimitutil-linux 2.21실행 중인 프로세스의 제한을 읽고 변경할 수 있는 명령이 도입되었습니다 .

/proc/<pid>/limits이것은 메인라인 커널에 통합되지 않은 writable의 후속 버전입니다 . 이 솔루션은 효과가 있을 것입니다.

$ prlimit  --nofile --output RESOURCE,SOFT,HARD --pid 23052
RESOURCE SOFT HARD
NOFILE   1024 4096

한도 설정:

$ prlimit --nofile=4096:8192 --pid 23052

확인하다:

$ prlimit  --nofile --output RESOURCE,SOFT,HARD --pid 23052RESOURCE SOFT HARD
NOFILE   4096 8192
$ grep "open files" /proc/23052/limits
Limit                     Soft Limit           Hard Limit           Units     
Max open files            4096                 8192                 files     

관련 정보