포크 : 재시도 : 리소스를 일시적으로 사용할 수 없음 [닫힘]


80

컴퓨터에 Intel MPI Benchmark를 설치하려고했는데이 오류가 발생했습니다.

fork: retry: Resource temporarily unavailable

그런 다음 실행 ls하여 top명령 할 때이 오류를 다시 받았습니다 .

이 오류의 원인은 무엇입니까?

내 컴퓨터의 구성 :

Dell precision T7500
Scientific Linux release 6.2 (Carbon)

프로세스 수를 늘리는 방법에 대한 Linux 문서를 확인하십시오.
theglauber

2
아마도 이것이 도움이 될 것입니다 : stackoverflow.com/questions/344203/…
theglauber

답변:


82

이는 일반적으로 파일 설명자가 부족하여 발생합니다.

시스템의 총 파일 디스크립터 제한이 있습니다. 명령에서 무엇을 얻습니까?

sysctl fs.file-nr

파일 설명 자의 수를 반환합니다.

<in_use> <unused_but_allocated> <maximum>

사용자 파일 설명자 제한이 무엇인지 알아 보려면 다음 명령을 실행하십시오.

sudo su - <username>
ulimit -Hn

사용자가 사용중인 파일 설명자 수를 확인하려면 다음 명령을 실행하십시오.

sudo lsof -u <username> 2>/dev/null | wc -l

따라서 이제 시스템 파일 설명자 제한 문제가있는 경우 /etc/sysctl.conf 파일을 편집하고 이미 존재하는 파일을 추가하거나 수정해야합니다. fs.file-max가있는 줄을 큰 값으로 설정합니다. 필요한 파일 설명자 수를 처리하고 재부팅하기에 충분합니다.

fs.file-max = 204708

15
참고로 "sysctl -p"를 사용하여 재부팅을 저장하는 /etc/sysctl.conf의 현재 설정을 적용 할 수 있습니다.
EmmEff 2014

2
또한 읽기 전용 / etc가있는 경우 런타임에 'sysctl -w fs.file-max = 204708'을 사용할 수 있습니다.
Ondrej Galbavý 2015 년

당신은 또한 재부팅없이 커널에 직접 추가 할 수 있지만 영구적으로 수 '에코 999999> / proc 디렉토리 /에서 sys / FS / 파일 최대'
맷슨 kepson

50

또 다른 가능성은 너무 많은 스레드입니다. 스레드 풀을 사용하는 앱에 대해 테스트 하네스를 실행할 때이 오류 메시지가 나타납니다. 우리는 사용했었다

watch -n 5 -d "ps -eL <java_pid> | wc -l"

주어진 Java 프로세스 ID 내에서 실행중인 Linux 원시 스레드의 지속적인 수를 확인합니다. 약 1,000 회 (YMMV)를 기록한 후 언급 한 오류 메시지를 받기 시작했습니다.


2
테스트 할 때 ps -eL모든 프로세스 ps -L <pid>를 표시하고 <pid>. ps -eL <pid>에 관계없이 모든 프로세스를 표시합니다 <pid>.
이상현

1
@Willie Wheeler 스레드 한계를 극복하기 위해 무엇을 했습니까? 저는 DAYS 동안 아무 소용이없는 온라인에서 찾은 수많은 솔루션을 검색하고 테스트했습니다. 오류가 다시 시작되기 전에 약 1 시간 동안 지속되는 systemd-logind의 재시작을 제외하고는 1k 이상의 스레드를 허용하지 않습니다!
Brandon Elliott

기계에는 유한 한 자원이 있습니다. 한계에 도달하면 더 적은 수의 스레드 (예 : 스레드 풀로 제어)를 사용하거나 더 많은 시스템을 사용하십시오.

내 레일 서버를 다시 시작했습니다
thedanotto

2
1000 스레드는 많지 않습니다.
frankster
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.