У меня есть сервер хранения, на котором запущена Nexenta (ядро OpenSolaris, пользовательское пространство Ubuntu) с MySQL поверх массива хранения ZFS, с использованием innodb_file_per_table и ulimit -n, установленного на 8K. mysqltuner.pl подтверждает ограничение на количество файлов и утверждает, что существует 169 файлов.
Следующая команда:
pfiles `fuser -c / 2>/dev/null
указывает на один процесс mysqld, имеющий 485 дескрипторов файлов / устройств (и они почти все для файлов), поэтому я не знаю, насколько надежен сценарий настройки, но он по-прежнему меньше 8 КБ, и в этом списке также нет другого процесса, который близко к пределу. Общее общее количество используемых дескрипторов составляет около 1 КБ.
Так что же может привести к тому, что mysqld будет постоянно передавать следующие ошибки?
[date] [host] mysqld[pid]: warning: cannot open /etc/hosts.allow: Too many open files
[date] [host] mysqld[pid]: warning: cannot open /etc/hosts.deny: Too many open files
Кажется, что на самом деле все работает нормально, но проблема постоянно заполняет консоль администратора и сразу же запускается при новой загрузке (не только воспроизводимой, но всегда из mysqld и всегда из файлов hosts, разрешения которых по умолчанию -rw-r--r-- 1 root root
). Я мог бы, конечно, подавить его из консоли администратора, но я бы предпочел разобраться в этом и по-прежнему позволять предупреждениям / ошибкам mysqld достигать консоли администратора.
РЕДАКТИРОВАТЬ: не только фактический дескриптор файла находится в разумных пределах, проблема также сохраняется (с немедленным появлением) даже при увеличении лимита файла до 65535 и всегда только на hosts.allow / deny.
Учитывая, что в то время Nexenta была основана на OpenSolaris, вы можете столкнуться с Эта проблема. Это делает кажется, что ограничения файловых дескрипторов не применяются согласованным образом во всей системе.
Вы действительно используете hosts.allow / deny в своей настройке?
Что значит lsof
вывод похож?