오늘 내 서버가 Too many open files in system:
와 충돌했지만 이미 높은 값이 있습니다. 이에 대한 최대 값은 얼마입니까?
Google에 “좋은 결과가없는 것 같습니다. 이러한 값을 설정할 때 고려해야 할 사항이 무엇인지 설명합니다. 그들은 단지 100k처럼 설정하라고 말합니다.
현재 10GB 만 사용하는 32GB RAM 서버가 있습니다. 파일 제한을 매우 높은 값으로 늘리면 RAM 사용량이 증가한다고 가정합니다.이를 계산하는 데 사용할 수있는 공식이 있나요? 8GB RAM의 경우처럼 X 개의 파일을 열 수 있습니까?
현재 설정 :
cat /proc/sys/fs/file-max 100000 ulimit -Hn 1048576 ulimit -Sn 1024
댓글
Answer
Kusalananda가 말했듯이 file-max
는 메모리 사용에 직접적인 영향을주지 않지만 프로세스가 더 많은 파일 디스크립터를 열 수있게하여 두 가지 모두 커널에서 파일 설명을 추적하고 메모리를 증가시킵니다. 설명 및 설명자를 사용하는 프로세스에서의 사용) — 커널 주석은 커널 데이터에 대해 파일 당 약 1KB를 제안하며, 종료되면 기본값 file-max
(8192)를 줄입니다. 시스템 부팅시 메모리의 10 % 이상을 나타냅니다 ( 즉 RAM이 80MiB에 불과 함). 커널이 부과하는 최대 값은 아키텍처의 C에서 long
유형의 변수에 저장할 수있는 최대 값입니다.
, inode-max
도 늘려야합니다. 커널 문서 는 이것이 “file-max의 값보다 3-4 배 더 커야합니다. stdin, stdout 및 네트워크 소켓에도 inode 구조체가 필요하므로 처리하십시오.”
file-max
를 누르면“VFS : file-max limit n 에 도달했습니다”라는 커널 로그 메시지가 표시됩니다. ”을 n 에 적절한 값으로 지정합니다. 로그에이 정보가 없으면 file-max
를 누르지 않거나 로그를 너무 많이 필터링하고있는 것입니다 (정보 수준 로그 메시지).
(file-max
는 CAP_SYS_ADMIN
로 프로세스를 제한하지 않으므로이를 눌러도 모든 것이 중지되지는 않습니다.)
댓글
- 그러면 임의적으로 높은 숫자를 갖는 데 단점이 없습니까? 내 시스템에 '
inode-max
가 보이지 않습니까? 여기에 Ubuntu 16.04가 있습니다. 서버 충돌을 다시 방지하고 싶습니다.이 서버에서 여러 웹 서비스를 실행하고 ' 리소스 활용에 대해서는 신경 쓰지 않습니다. - 단점은 프로세스가 급증한다는 것입니다. 파일 설명에 대한 전반적인 제한에 걸리지 않으므로 다른 방식으로 리소스 부족을 유발할 수 있습니다.
ulimit
는 프로세스 별 리소스 제한을 표시 / 설정합니다.