실행중인 프로세스에서 최대 파일 제한 설정


27

결국 최대 열린 파일 제한에 도달하는 프로세스가 오래 실행됩니다. 실패한 후에 변경하는 방법을 알고 있지만 명령 줄에서 실행중인 프로세스의 변경 방법이 있습니까?

답변:


28

CentOS / RHEL의 최신 커널 (2.6.32+)에서는 런타임에 / proc / <pid> / limits를 사용하여이를 변경할 수 있습니다.

cd /proc/7671/
[root@host 7671]# cat limits  | grep nice
Max nice priority         0                    0                    
[root@host 7671]# echo -n "Max nice priority=5:6" > limits
[root@host 7671]# cat limits  | grep nice
Max nice priority         5                    6                    

그 규칙! 한계 파일에 쓸 수 있다는 것을 몰랐습니다.
clee

4
우분투 12.04에서 나를 위해 작동하지 않습니다
Poma

5
이것은 3.2 커널에서는 작동하지 않습니다 . 커널의 fs / proc / base.c 에이 패치의 흔적 보이지 않기 때문에 배포판에 비공식 패치가 있다고 생각합니다 .
Totor

아마도 ... RHEL / CentOS 커널에 존재한다는 것을 알고 있습니다. 데비안 커널에는없는 것 같습니다.
Sig-IO

2
'setprlimit'는 미래를 보장하는 권장 방법입니다. 다음 답변 참조
Sig-IO

26

여기 에 설명 된 것처럼 prlimitutil-linux 2.21에 도입 된 명령을 사용하면 실행중인 프로세스의 한계를 읽고 변경할 수 있습니다.

이것은 /proc/<pid>/limits메인 라인 커널에 통합되지 않은 쓰기 가능한 후속 작업 입니다. 이 솔루션은 작동합니다.

prlimit(1)아직 없는 경우 prlimit(2)맨 페이지 에서 코드를 최소한의 버전으로 찾을 수 있습니다 .


2
맨 페이지의 최소 버전은 +1!
Totor

경고 : 한계에 도달 한 후 프로세스에서 "nolimit"를 변경하면 "memcached"가 segfault입니다. 쓰기 가능한 제한을 사용하는 것이 항상 좋은 생각은 아닙니다.
John


2

man ulimit-n 옵션을 사용하여 ulimit 를 시도 할 수 있지만 mag 페이지는 대부분의 OS에서이를 설정하도록 허용하지 않습니다.

다음을 사용하여 시스템 전체 파일 설명 제한을 설정 sysctl -w fs.file-max=N하고 부팅 후 변경 사항을 유지합니다./etc/sysctl.conf

그러나 주어진 시간에 너무 많은 파일을 열어야하는지 실제로 프로세스를 살펴보고 실제로 일부 파일을 닫고 프로세스에서보다 효율적으로 수행하는 것이 좋습니다.


열려있는 파일은 버그이지만 알아낼 수 없었습니다. 그렇게하고 싶지만 정오에 생산이 주기적으로 중단됩니다.
카기

ulimit실행중인 프로세스에는 설정을 적용하지 않습니다 .
try-catch-finally

0

프로세스는 프로그래밍 된 경우 (또는 해킹을 관리하는 경우) 자체 소프트 한계를 변경할 수 있지만 CAP_SYS_RESOURCE 기능이 없으면 하드 한계를 늘릴 수 없습니다. 에서 런타임에 한계를 검사 할 수 있습니다 /proc/$pid/limits.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.