limits.conf 값이 프로세스별로 적용됩니까?


25

오라클 사용자 nofile/etc/security/limits.conf위해 가치를 조정하고 있으며 그 동작에 대한 질문 nofile이 있습니다. 사용자가 모든 프로세스에서 열 수 있는 총 파일 수를 제한하거나 사용자가 가질 수있는 총 파일 수를 제한합니까 프로세스 마다 열려 있습니까?

특히 다음 사용법의 경우 :

oracle                  hard    nofile                  65536

답변:


23

대부분의 limits.conf값 ¹ 은 ulimit쉘 명령이나 setrlimit시스템 호출 로 설정할 수있는 한계입니다 . 그것들은 프로세스의 속성입니다. 한도는 각 프로세스에 대해 독립적으로 적용됩니다. 특히 각 프로세스는 nofile파일 을 열 수 있습니다. 사용자 프로세스에 의해 누적 된 열린 파일 수에는 제한이 없습니다.

nproc제한은 사용자의 모든 프로세스를 합산한다는 점에서 특별한 경우입니다. 그럼에도 불구하고 여전히 프로세스별로 적용됩니다. 프로세스가 fork새 프로세스를 작성하기 위해 호출 할 때 프로세스의 euid에 속하는 프로세스 수가 프로세스 RLIMIT_NPROC값 보다 크면 호출이 거부됩니다 .

limits.conf매뉴얼 페이지에는 한계가 세션에 적용한다고 설명한다. 즉, 세션의 모든 프로세스는 이러한 프로세스 중 하나에 의해 변경되지 않는 한 모두 동일한 한계를 갖습니다. 그것은 세션의 프로세스에 대해 어떤 합계가 이루어 졌다는 것을 의미하지는 않습니다 (운영 체제가 추적하는 것조차 아닙니다. 세션 개념이 있지만 그보다 세분화되어 있습니다. 예를 들어 각 X11 응용 프로그램은 종료되는 경향이 있습니다) 자체 세션에서). 작동하는 방식은 로그인 프로세스가 자체적으로 제한을 설정하고 모든 하위 프로세스에서 상속한다는 것입니다.

¹ 예외는 maxlogins, maxsysloginschroot거부 로그인 프로세스의 일부 또는 영향 로그인으로 적용되는.


반대로, 다른 세션이 다른 한계 세트를 가질 수 있다는 것을 의미합니까?
CMCDragonkai

1
@CMCDragonkai 예, 예를 들어 limit.conf세션이 열린 시간 사이에 변경되었거나 다른 한계 (루트를 제외하고 더 작아야 함)가에 설정된 경우 .profile.
Gilles 'SO- 악마 그만해'

1
@laimison 실행중인 모든 프로세스를 반복하고 prlimit --pid $pid각각에서 실행 하는 경우 활성 세션의 한계를 효과적으로 변경할 수 있습니다. 반복하는 동안 일부 프로세스가 중단되는 경우 몇 번 수행해야 할 수도 있습니다.
Gilles 'SO- 악마 그만

1
@laimison 아니요. 사용자가 A 프로세스와 B 프로세스를 두 개만 가지고 A RLIMIT_NPROC에서 2로 , B에서 3으로 설정 했다고 가정합니다 . 그러면 B는 하나 이상의 프로세스를 분기 할 수 있지만 A는 할 수 없습니다.
Gilles 'SO- 악마 그만'11

1
@laimison B의 부모에서 한계를 2로 설정하고 분기 후에 B에서 변경하지 않으면 B의 한계는 2가됩니다. B의 부모에서 한계를 2로 설정했지만 B에서 한계를 올리면 B를 포크하기 전에 B의 부모에서 한계를 3으로 설정하고 B를 포크 한 후에 2로 설정하면 B의 한계는 3으로 설정됩니다. 중요한 유일한 한계는 fork ()를 호출하는 프로세스의 한계입니다. 해당 프로세스의 부모 또는 다른 프로세스에서
Gilles 'SO- 악마 그만'11
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.