предисловие
Недавно проект готов к выходу в онлайн, и он прошел проверку в тестовой среде и готов развернуть проект в «пререлизной среде», что можно понимать как среду последней проверки перед выходом в онлайн. В процессе развертывания было обнаружено, что несколько задействованных проектов не удалось развернуть, а интеграционная платформа Jenkins «сообщила о красном», что меня ошеломило.
Вот объяснение того, как развертывается проект: после выполнения ряда связанных со сборкой операций через jenkins продукт сборки (в виде военного пакета) передается в контейнер tomcat указанной машины среды для запуска.
проблема решена
Быстро извлеките журнал tomcat на машине, чтобы увидеть волну, и вскоре обнаружил, что, хотя соответствующие проекты были успешно развернуты в контейнере, процесс запуска завершился неудачно.
Глядя на журнал, должно быть, что есть проблема в процессе распаковки пакета jar, и он отображает [Слишком много открытых файлов], Буквально это должно быть связано с количеством файлов, открытых на текущей машине.
дескриптор файла
Здесь мы представим концепцию дескриптора файла Linux,Под дескриптором можно понимать специальный идентификатор.После обработки операционной системой он может указывать на область памяти.Похоже на «указатель».Разница в том, что указатель указывает непосредственно на память, а дескриптор зависит от обработки операционной системы или других программ.После этого перенаправление на определенную область памяти.
Здесь нужно только понимать, что процесс приложения должен использовать объект дескриптора, предоставленный операционной системой, для работы с файлом.
предел обработки
Поскольку дескриптор файла предоставляется операционной системой, система Linux, безусловно, не позволит вам бесконечно открывать файл, она ограничивает количество дескрипторов, которые разрешено открывать одному процессу.
Все параметры ограничения системных ресурсов можно просмотреть с помощью команды ulimit -a, где строка открытых файлов — это максимальное количество дескрипторов, которые в настоящее время разрешено открывать одному процессу, то есть 65535.
[root@iZ8vbcrus31oj4g007u7b0Z ~]# ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 6871
max locked memory (kbytes, -l) 16384
max memory size (kbytes, -m) unlimited
open files (-n) 65535
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 6871
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Конечно, вы также можете просмотреть ограничение дескриптора напрямую с помощью ulimit -n.
[root@iZ8vbcrus31oj4g007u7b0Z ~]# ulimit -n
65535
Далее мы посмотрим на количество файлов, открытых процессом.
С помощью команды ps сначала найдите PID соответствующего процесса, например процесса службы mysql.
[root@iZ8vbcrus31oj4g007u7b0Z ~]# ps -ef | grep 'mysql'
UID PID PPID C STIME TTY TIME CMD
mysql 1058 1 0 4月05 ? 00:17:36 /usr/sbin/mysqld
После этого вы можете просмотреть сведения о файлах, открытых указанным процессом, с помощью команды lsof, а затем подсчитать результаты, чтобы получить количество файлов, открытых процессом. обслуживание на моей машине 77
[root@iZ8vbcrus31oj4g007u7b0Z ~]# lsof -p 1058 | wc -l
77
Изменить конфигурацию ручки
Количество дескрипторов, которые можно перенастроить.Вы можете видеть, что пользователь root настроен с ограничением 65535 по умолчанию, то есть это ограничение для процессов, открытых пользователем root.
vi /etc/security/limits.conf
Если пользователь для входа не указан, это ограничение для всех пользователей.
soft nofile 65535
hard nofile 65535
Обратите внимание, что после изменения конфигурации вам необходимо отключить ssh-соединение и снова войти в систему, чтобы конфигурация вступила в силу.
Суммировать
Благодаря этой статье мы узнали:
- лимит дескрипторов системных файлов Linux
- Как проверить количество файлов, открытых процессом
- Измените конфигурацию системы, связанную с количеством дескрипторов файлов.
Если вы считаете, что статья была вам полезна, оставьте комментарий и поставьте лайк.