열린 파일 핸들

열린 파일 핸들

루프에서 여러 프로세스를 생성하면 최대 열린 파일 핸들 수에 도달하고 for 루프가 중단됩니다.

열린 파일 핸들을 사용하여 계산하면 다음과 같은 결과를 lsof얻습니다.

$ lsof | wc -l
1464377

그러나 수표는 다음을 fs.file-nr반환합니다.

$ sysctl fs.file-nr
fs.file-nr = 35328      0       6553201

첫 번째 숫자는 1464377이 될 것으로 예상했습니다.

질문이 몇 개 있습니다:

  1. lsof(1464377)와 file-nr(35328) 출력의 차이점은 무엇입니까?

  2. 최대값은 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이 할당되어 있습니다. 값은 매우 가깝습니다.

sysctl의 fs 파티션에 대한 커널 문서

관련 정보