ulimit -u가 실행 중인 프로세스 수보다 훨씬 크면 왜 문제가 발생합니까?

ulimit -u가 실행 중인 프로세스 수보다 훨씬 크면 왜 문제가 발생합니까?

200개의 프로세스를 실행하고 있는데 ulimit -u400개가 몇 가지 문제를 일으키는 것 같습니다.

$ ps -A | wc -l
199
$ ulimit -u 400
zsh: fork failed: resource temporarily unavailable

혼란스러워요. 한도에 도달한 이유는 무엇입니까?

편집하다: 처음에 ulimit -u주어진

$ ulimit -u
47334

답변1

리눅스에서개수에는 포함되지만 ulimit -u일반적으로 그렇게 표시되지는 않습니다 ps -A. L플래그를 추가해야 합니다 .

예를 들어 내 컴퓨터에서는 다음과 같습니다.

% ps -A | wc -l 
124
% ps -AL | wc -l
155

31개의 추가 프로세스가 실행 중인 것을 볼 수 있습니다. 이는 일반적으로 보기에서 숨겨져 있는 스레드입니다.

Java 및 기타 고도로 스레드된 애플리케이션을 사용하면 생각보다 더 많은 스레드/프로세스를 쉽게 실행할 수 있습니다. 귀하의 ulimit -u가치는 이를 고려해야 합니다.

ulimit이는 기본적으로 다음 설정 과 함께 제공되는 RedHat 시스템에서 많은 Java 애플리케이션을 실행하는 사람들에게 예기치 않게 영향을 미칠 수 있습니다 .

% cat /etc/security/limits.d/20-nproc.conf 
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

*          soft    nproc     4096
root       soft    nproc     unlimited

관련 정보