На моем CentOS 7 я использую cat /proc/<pid>/limits
чтобы увидеть установленный предел фактического топлива. Я получил подтверждение, что этот метод здесь полностью точен, потому что я использую его в MySQL, который не может выгружать конкретную базу данных с более чем 8000 таблиц в ней. Если, используя prlimit
Ставлю 10000, дамп успешно завершается.
Теперь я бы хотел избежать использования prlimit, поэтому я настроил файл /etc/security/limits.conf в соответствии со своими потребностями, и если я запустил bash с соответствующим пользователем (mysql), я смогу увидеть правильное значение ограничения. при беге ulimit -a
.
Проблема в том, что для процесса mysqld, запущенного пользователем mysql, по-прежнему установлено значение по умолчанию (здесь 1024), что приводит к сбою при сбросе базы данных. Единственное решение, которое у меня есть, - запустить prlimit во время выполнения, но я хотел бы понять, чего не хватает, чтобы мои процессы учитывали конфигурацию ограничений при запуске.
В конце концов обнаружил проблему: ограничения обрабатываются Systemd, мне пришлось создать файл /etc/systemd/system/mariadb.service.d/limits.conf с содержимым:
[Service]
LimitNOFILE=10000
Итак, главное помнить: systemd совершенно не заботится о файлах / etc / security / limits *.