루프에서 여러 프로세스를 생성하면 최대 열린 파일 핸들 수에 도달하고 for 루프가 중단됩니다.
열린 파일 핸들을 사용하여 계산하면 다음과 같은 결과를 lsof
얻습니다.
$ lsof | wc -l
1464377
그러나 수표는 다음을 fs.file-nr
반환합니다.
$ sysctl fs.file-nr
fs.file-nr = 35328 0 6553201
첫 번째 숫자는 1464377이 될 것으로 예상했습니다.
질문이 몇 개 있습니다:
lsof(1464377)와 file-nr(35328) 출력의 차이점은 무엇입니까?
최대값은 6553201인 것으로 보이며 이는 매우 임의적인 것으로 보입니다. 이 숫자의 최대값은 얼마입니까?
답변1
~에 따르면man lsof
열려는 파일은 일반 파일, 디렉토리, 블록 특수 파일, 문자 특수 파일, 실행 가능한 텍스트 참조, 라이브러리, 스트림 또는 네트워크 파일(인터넷 소켓, NFS 파일 또는 UNIX 도메인 소켓)일 수 있습니다. 경로별로 파일을 선택하거나 파일 시스템의 모든 파일을 선택할 수 있습니다.
따라서 입력 줄의 수가 lsof
실제 파일 설명자보다 많을 수 있습니다.
다음 관련 질문을 참조하세요.https://serverfault.com/questions/485262/number-of-file-descriptors- Different- Between-proc-sys-fs-file-nr-and-proc-pi
답변2
@Archemar 말이 맞아요. 나는 늦었다. 확인했습니다(문자 특수 파일, 네트워크 파일, 디렉터리 제외...).
$ lsof /|grep -v DIR|wc -l
1191
$ sysctl fs.file-nr
fs.file-nr = 1280 0 98018
1191
파일이 열려 있고 핸들 1280
이 할당되어 있습니다. 값은 매우 가깝습니다.