최대 열린 파일 수와 같은 리소스 제한에 도달한 장기 실행 프로세스가 있습니다.
나는 그것을 죽이고 싶지 않습니다.
일반적으로 다음을 수행합니다.
(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 -n
invalid argument
- 이것이 없으면 " " 오류가 발생합니다 .
위의 방법이 항상 작동하는 것은 아니므로
또 다른 옵션은prlimit
util-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