프로세스는 어떻게 하드 제한 세트보다 더 높은 열린 파일 설명자 제한을 가질 수 있습니까?

프로세스는 어떻게 하드 제한 세트보다 더 높은 열린 파일 설명자 제한을 가질 수 있습니까?

나는 사용하고있다솔라리스 11내가 이해한 바로는 권한이 없는 사용자는 하드 제한 내에서 최대 열린 파일 설명자의 소프트 제한을 늘리거나 줄일 수 있습니다. 권한이 없는 사용자도 하드 제한을 줄일 수 있지만, 줄인 후에는 늘릴 수 없습니다.

다음 시나리오를 진행하고 있습니다. 아래 명령을 사용하여 소프트 및 하드 제한이 설정된 권한이 없는 사용자가 있습니다 ulimit.

소프트 한도: 10000

하드 제한: 10000

-bash-4.4$ ulimit -n
10000
-bash-4.4$ ulimit -Hn
10000
-bash-4.4$ ulimit -Sn
10000

즉, 사용자는 최대 열린 파일 설명자 제한이 10,000보다 큰 프로세스를 시작할 수 없어야 합니다. 그러나 열린 파일 설명자에 대한 제한이 더 높은 동일한 사용자로 실행되는 일부 프로세스는 설명할 수 없습니다. 그러한 프로세스가 여러 개 실행 중입니다.

-bash-4.4$ plimit 12553
12553:  
   resource              current         maximum
  time(seconds)         unlimited       unlimited
  file(blocks)          unlimited       unlimited
  data(kbytes)          unlimited       unlimited
  stack(kbytes)         8192            unlimited
  coredump(blocks)      unlimited       unlimited
  nofiles(descriptors)  65536           65536
  vmemory(kbytes)       unlimited       unlimited

이는 Java 프로세스이며 다음에서 실행됩니다.솔라리스 지구. 상위 프로세스는 입니다 zsched. 제공된 모든 정보는 이 영역 내에서 제공됩니다. 처리 명령도 아래에 나와 있습니다.

java -d64 -DAppName=java_app -server -Xms2048m -Xmx6144m -Xmn2040m - 

프로세스 자체와 시작 방법에 대한 정보가 많지 않습니다. 권한이 없는 사용자가 더 높은 열린 파일 설명자 제한을 사용할 수 있도록 허용하는 특정 시나리오가 누락되어 있습니까?

내 가설:

이 정보는 도움이 될 수 있습니다. 해당 머신에서 /etc/profile다음 명령을 사용하여 파일에 제한을 설정합니다.

ulimit -n 10000

이는 사용자가 로그인할 때마다 파일이 호출되고 제한 사항이 적용된다는 의미입니다. 내 가정은 그러한 프로세스가 일반적인 대화형 로그인이나 심지어 비로그인 쉘을 사용하여 시작되지 않을 수도 있다는 것입니다. 대화형 로그인 및 대화형 비로그인 쉘 모두에서 호출되므로 /etc/profile(내 관찰에 따르면) 이 쉘에서 시작된 프로세스는 더 높은 파일 설명자 제한을 가져서는 안 됩니다.

이는 스크립트나 cron과 같은 비대화형 셸을 호출할 필요가 없기 /etc/profile때문에 다른 기본 제한 사항이 사용될 수 있기 때문일 수 있습니다. 그러나 이러한 과정으로 볼 때 이러한 시나리오는 일어날 가능성이 거의 없어 보입니다. 다른 가능성이 있나요?

우리는 Solaris를 지원하지만 커뮤니티는 그다지 도움이 되지 않으므로 도움을 얻기 위해 이러한 포럼에 의존합니다.

답변1

귀하의 요청을 정확히 따르는지 잘 모르겠습니다.

SA가 COTS 제품(일반적으로 데이터베이스) 또는 사용자 정의 애플리케이션의 /etc/profile에 ulimit 항목을 추가할 가능성이 있습니다.

plimit를 통해 다른 값이 표시되는 이유는 사용자/응용 프로그램이 다른 값을 설정했거나 다른 리소스 제어 메커니즘에 의해 선택되었을 수 있기 때문일 수 있습니다. 즉, /etc/project

관련 정보