Linux에서 열린 파일 수가 제한되는 이유는 무엇입니까?

Linux에서 열린 파일 수가 제한되는 이유는 무엇입니까?

이제 다음 방법을 알고 있습니다.

  • 프로세스당 열린 파일 제한을 찾으세요.ulimit -n
  • 모든 프로세스에서 열린 파일 수를 계산합니다.lsof | wc -l
  • 허용되는 최대 열린 파일 수를 가져옵니다.cat /proc/sys/fs/file-max

내 질문은: Linux에서 파일을 여는 데 왜 제한이 있습니까?

답변1

그 이유는 운영 체제가 열려 있는 각 파일을 관리하기 위해 메모리가 필요하고 메모리는 제한된 리소스이기 때문입니다. 특히 임베디드 시스템에서는 더욱 그렇습니다.

ulimit -n루트로서 프로세스당(경유) 및 시스템당(예:) 최대 열린 파일 수를 변경할 수 있습니다 echo 800000 > /proc/sys/fs/file-max.

답변2

lsof | wc -l중복된 항목이 많이 요약되어 있습니다(포크된 프로세스는 파일 핸들 등을 공유할 수 있음) . 이 숫자는 에 설정된 제한보다 훨씬 높을 수 있습니다 /proc/sys/fs/file-max.

Linux 커널 관점에서 현재 열려 있는 파일 수를 얻으려면 다음을 수행하십시오.

cat /proc/sys/fs/file-nr

예: 이 서버에는 최대 65536개의 열린 파일이 있으며 그 중 40096개가 있지만 lsof는 훨씬 더 많은 수를 보고합니다.

# cat /proc/sys/fs/file-max
65536
# cat /proc/sys/fs/file-nr 
40096   0       65536
# lsof | wc -l
521504

답변3

나는 이것이 주로 역사적인 이유 때문이라고 생각합니다.

intUnix 파일 설명자는 및 등의 함수에 의해 반환되고 , 등에 전달되는 작은 값입니다 .opencreatreadwriteclose

적어도 초기 버전의 Unix에서 파일 설명자는 단순히 고정된 크기의 프로세스별 구조 배열에 대한 인덱스였으며 각 구조에는 열린 파일에 대한 정보가 포함되어 있었습니다. 내 기억이 맞다면 일부 초기 시스템에서는 이 테이블의 크기를 약 20개로 제한했습니다.

보다 현대적인 시스템은 더 높은 한계를 가지지만 대체로 관성에서 벗어나 동일한 일반 체계를 유지합니다.

관련 정보