1C/Слишком много открытых файлов
Устраняем ошибку «Слишком много открытых файлов» или «Too many open files» в 1С под ОС Linux
Подробнее об ошибке
Пример полного текста ошибки:
Ошибка при выполнении файловой операции … Слишком много открытых файлов.
Configuration repository operation failed. по причине: Error reading file from the file storage По причине: File operation error……: Too many open files
Описание
Данная ошибка связана с тем, что ОС Linux исчерпала ограниченный ей лимит файлов на открытие и может возникать как при работе пользователя в пользовательском режиме, так и при работе разработчика с хранилищем конфигурации.
Побочными ошибками данной проблемы могут являться также ошибки работы с дисковой подсистемой. Такие как:
Unable to open files
Решение
На всех серверах 1С выполним следующие настройки лимитов открываемых файлов.
Увеличиваем лимит на открытые файлы всей системы.
1. Получим значение количества файлов, которые можно открыть в нашей файловой системе:
# cat /proc/sys/fs/file-max
Скорее всего, здесь мы увидим числа порядка: 97822; 65208 и т.д.
Такие пределы нас вполне устраивают.
Данное значение используем в дальнейшей настройке.
Но, если понадобится их увеличить – добавим строку настроек в конфигурационный файл /etc/sysctl.conf любым удобным способом:
# echo "fs.file-max = 65000" >>/etc/sysctl.conf
2. Перечитаем параметры:
# sysctl –p
где 65000 – это то число файлов, которое нам необходимо иметь возможность открывать в нашей файловой системе.
Увеличиваем лимит на открытые файлы для процессов 1С.
1. Отредактируем файл:
# mcedit /etc/security/limits.conf
Добавим строки:
usr1cv8 hard nofile 65000 usr1cv8 soft nofile 65000
2. Перечитаем параметры:
# sysctl –p
3. Убедимся, что изменения вступили в силу. Получим pid службы:
# ps -fu usr1cv8 | grep ragent
4. По номеру pid получим значение параметра «max open files»:
# cat /proc/pid/limits | grep open
Значение должно быть 65000.
Увеличиваем лимиты на открытые файлы для процесса 1С редактированием файла демона.
Результат данной настройки будет аналогичен предыдущему варианту.
1. Отредактируем настройки:
# systemctl edit srv1cv8
Добавим строки:
[Service] LimitNOFILE=65000 LimitNOFILESoft=65000
2. Обновим конфигурацию демон:
# systemctl daemon-reload
3. Перезапустим службу:
# systemctl restart srv1cv8
Отметим также, что помимо настроек, относящихся к количеству открытых файлов – может понадобится обратить внимание на настройки максимального числа сегментов разделяемой памяти для всей системы.
Увеличиваем максимальное число сегментов разделяемой памяти для всей системы.
При необходимости — установим настройку:
# echo "kernel.shmmni = 65000" >> /etc/sysctl.conf # sysctl -p
Проверим, что настройка установилась:
# cat /proc/sys/kernel/shmmni
Все наши модифицированные настройки можем увидеть в конфигурационном файле /etc/sysctl.conf:
$ cat /etc/sysctl.conf