특정 프로세스의 ulimit 수정(파일 열기)

특정 프로세스의 ulimit 수정(파일 열기)

변경될 수 있나요?부드러운 -그리고하드 제한~의특정한프로세스?

내 경우 프로세스는 다음과 같았습니다 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과 같은 도구는 상위 및 하위 트리로 표시된 프로세스를 표시할 수 있습니다.

관련 정보