변경될 수 있나요?부드러운 -그리고하드 제한~의특정한프로세스?
내 경우 프로세스는 다음과 같았습니다 mongod
. 많은 웹 리소스에서 다음과 같이 하라고 했습니다.
ulimit -n <my new value>
나의 현재 생각:
- 명령이 아는 방법에 대한 제한 사항프로세스무엇을 수정하고 싶나요? 시스템 전체의 열린 파일 제한이 수정되지 않습니까?
- 이 명령은 소프트 리미트만 변경하는 것 같습니다. 그렇다면 하드 한도를 높일 수 있는 방법은 없을까요?
답변1
실행 중인 프로세스의 제한을 변경하려면 유틸리티 명령을 사용할 수 있습니다 prlimit
.
prlimit --pid 12345 --nofile=1024:1024
내부적으로 수행하는 작업은 호출입니다 setrlimit(2)
. prlimit의 매뉴얼 페이지에는 몇 가지 유용한 호출 예제가 포함되어 있습니다.
원천:https://sig-io.nl/posts/run-time-editing-of-limits-in-linux/
답변2
프로세스는 setrlimit(2)
시스템 호출을 통해 한계를 변경할 수 있습니다. 달리다 보면 ulimit -n
숫자가 보일 것입니다. 이는 프로세스에서 열린 파일 설명자(파일, 소켓, 파이프 등 포함) 수에 대한 현재 제한입니다. 이 ulimit
명령은 getrlimit(2)
시스템 호출을 수행하여 현재 값이 무엇인지 알아냅니다.
핵심은 프로세스가 상위 프로세스로부터 현재 제한을 상속한다는 것입니다. 따라서 실행하면 ulimit -n 64
셸의 열린 파일 설명자 제한이 64로 설정됩니다. 새 프로세스가 setrlimit()
적절하게 호출되지 않는 한 셸에서 시작된 모든 프로세스에는 동일한 제한 사항이 적용됩니다 .
mongodb's
열린 파일 설명자 제한을 변경하려면 ulimit -n 2048
쉘(또는 커널이 허용하는 큰 숫자)에서 실행할 수 있습니다. 그런 다음 해당 쉘을 사용하여 시작할 수 있습니다 mongodb
. 하위 프로세스로서 mongodb
열린 파일 설명자의 (큰) 제한이 상속됩니다.
시스템의 열린 파일 제한(모든 프로세스의 열린 파일 설명자 제한의 합계와 유사함)을 수정하려면 /etc/sysctl.conf
"modify" 및 "run"과 같은 작업을 수행해야 합니다 sysctl -p
. fs.file-max
매개변수의 값을 봅니다 /etc/sysctl.conf
.
답변3
적어도 Linux에서는 대부분의 배포판이 인증을 위해 pam을 사용하는 것 같습니다. pam과 함께 제공되는 모듈 중 하나는 다음과 같습니다.한계기준 치수. pam_limits에 대한 추가 정보 파일 인용:
The pam_limits PAM module sets limits on the system resources that can be obtained in a user-session. Users of uid=0 are affected by this limits, too.
따라서 하드 제한(루트는 이를 설정하고 프로세스는 더 높은 것을 요청할 수 없음)과 소프트 제한에서 사용자별, 그룹별 및 기본 제한을 설정할 수 있습니다. 소프트 제한은 일반적으로 하드 제한보다 낮게 설정되며, 응용 프로그램에서는 하드 제한에 도달할 때까지 이를 위로 늘릴 수 있습니다.
귀하의 경우 일반 사용자로 실행되는 프로세스에 대한 제한을 늘리려면 해당 사용자 또는 그룹에 대한 제한을 늘릴 수 있습니다. 예를 들어, 추가 파일 핸들을 열어야 하는 일부 서버에 mysql cron 작업이 있으므로 다음과 같이 설정했습니다.
$ cat /etc/security/limits.d/mysql.conf
@mysql soft nofile 100000
@mysql hard nofile 200000
다시 시작할 필요가 없습니다. 사용자에게 문의하면 새로운 제한 사항이 즉시 적용되는 것을 볼 수 있습니다.
일반적인 RedHat 파생 제품을 사용하는 경우, 필요한 ulimit 호출을 /etc/sysconfig/$SERVICE 스크립트에 넣는 것도 가능합니다. 예를 들어, Apache의 init 스크립트 이름은 /etc/init.d/httpd이며 /etc/sysconfig/httpd 구성 파일이 있으면 찾습니다. rpm이 업그레이드되면 init 스크립트가 업데이트되지만 sysconfig 파일은 기본값이 변경되지 않은 경우에만 업데이트되기 때문에 init 스크립트 자체를 편집하는 것보다 관리하기가 더 쉽습니다.
답변4
이 명령은 수정하려는 프로세스의 한계를 어떻게 알 수 있나요? 시스템 전체의 열린 파일 제한이 수정되지 않습니까?
이 명령은 현재 프로세스(쉘)와 모든 하위 프로세스(나중에 쉘에서 실행하는 모든 프로세스)의 제한을 변경합니다.
프로세스는 트리 형태로 구성됩니다. 모든 프로세스에는 상위 프로세스(라고 함)가 있습니다. 프로세스 번호 1 init는 자체 상위 프로세스이기 때문에 특별한 프로세스입니다. htop 또는 top과 같은 도구는 상위 및 하위 트리로 표시된 프로세스를 표시할 수 있습니다.