Каково влияние большого количества файловых дескрипторов на приложения Java - PullRequest
0 голосов
/ 09 мая 2019

У нас есть веб-приложение, развернутое на Tomcat, которое может иметь более 300 тыс. Дескрипторов файлов, в то время как ограничение для одного процесса составляет 250 тыс. Странная вещь: когда сервер работает, число увеличивается (400 КБ) и уменьшается (100 КБ). Иногда мы не можем войти в ОС, когда число велико. Однако мы не нашли никаких ошибок, связанных со многими открытыми файлами или установкой сокета. Большинство файловых дескрипторов связано с файлами JAR, загруженными JVM. Мои вопросы:
1. Как ОС (CentOS 7) считает файловые дескрипторы для tomcat? Я не думаю, что Tomcat сохраняет эти файлы открытыми во время работы. 2. Почему номер не зафиксирован? Вместо этого есть много дубликатов jar-файлов. 3. Нормально ли иметь так много файловых дескрипторов?

1 Ответ

1 голос
/ 09 мая 2019

Операционные системы имеют ограничение на количество файлов, которые могут быть одновременно открыты любым процессом.По умолчанию для большинства дистрибутивов используются только файлы 1024 .У каждого открытого файла также есть связанный дескриптор файла.Соединения с сокетом обрабатываются как файлы, и они используют файловый дескриптор, и поэтому на них распространяются те же ограничения ресурсов.

  1. Вы можете проверить или изменить максимальный предел с помощью команды ulimit.

  2. Можно также просмотреть значение атрибутов MBean - MaxFileDescriptorCount & OpenFileDescriptorCount , запустив инструмент JMX - JConsole.

  3. Когда OpenFileDescriptorCount меньше MaxFileDescriptorCount, ваше приложение работает нормально, в противном случае вы получите java.io.IOException: Too many open files, что приведет к сбоям в работе вашего приложения.

  4. Обычно для приложения счетFD (File Descriptor) идет вверх / вниз до определенного уровня.Но оно должно быть в пределах MaxFileDescriptorCount.

...