Назад | Перейти на главную страницу

Что делать с ошибкой: слишком много открытых файлов в системе?

Я запускаю cron, и вывод приходит на мой идентификатор и получается ниже в качестве вывода:

/ bin / sh: / usr / bin / php: слишком много открытых файлов в системе

Cron запускается каждые 5 минут.

Проверили /var/logs/cron и cron выполняется каждые 5 минут.

Сайты на сервере работают нормально.

Это означает, что в вашей системе закончились дескрипторы файлов на вашем php или в другом приложении. Убедись в близко любые файлы, которые вы открываете, бесплатно обрабатываются.

Для количества дескрипторов каждой запущенной программы используйте (как root):

for p in $(ps -A -o pid); do
    nh=$(ls /proc/$p/fd  2>/dev/null | wc -l) &&
    exe=$(readlink -f /proc/$p/exe  2>/dev/null) &&
    echo "$p ($exe): $nh"
done

Для более подробного вывода используйте lsof.

Вы также можете увеличить количество возможных дескрипторов системных файлов, изменив /etc/security/limits.conf (что влияет на изменения на /proc/sys/fs/file-max) и уменьшите его для текущего сеанса терминала с помощью ulimit -n.

Проверьте, сколько файлов вы в данный момент открыты в системе:

$ sysctl kern.num_files

и каково ваше ядро:

$ sysctl kern.maxfiles

Чтобы проверить, какие обычные файлы открыты, эта команда может помочь:

lsof | grep -w REG | less

Если ваш лимит слишком низкий, увеличьте его с помощью следующих команд (запускайте как root):

sysctl -w kern.maxfiles=20480
sysctl -w kern.maxfilesperproc=4096

Примечание: добавить sudo при необходимости при запуске из учетной записи пользователя.

и попробуй еще раз.

Чтобы установить его навсегда, добавьте его в свой /etc/sysctl.conf:

kern.maxfiles=20480
kern.maxfilesperproc=4096

Если у вас нет доступа для изменения лимитов, обратитесь к своему хостинг-провайдеру.