Ошибка в логе "Too many open files"

Материал из BiTel WiKi

Перейти к: навигация, поиск

Для Linux:

1) Увеличить для пользователя количество разрешённых дескрипторов в /etc/security/limits.conf:

bill       soft    nofile   10000                                                                                                                                                                                                                           
bill       hard    nofile  10000
где bill - имя пользователя, под которым работают приложения биллинга.

Для новых систем с systemd и mysql

Параметр выставляется так :

в/etc/systemd/system/
лежит файл mysql.service 
в секцию [Service] дописал LimitNOFILE=2048, далее 
systemctl daemon-reload 
systemctl restart mysql


linux.org.ru


Как узнать сколько файлов съел процесс

На примере mysql, узнаем код процесса, потом находим сколько файлов держит

[root@sql system]# ps -AF | grep mysql
mysql     2110     1  6 876409 1168440 3 12:58 ?       00:00:54 /usr/libexec/mysqld --basedir=/usr
root      2250  2001  0 53447   980   0 13:12 pts/1    00:00:00 grep --color=auto mysql
[root@sql system]# ls -l /proc/2110/fd | wc
   3619   39804  386327

процесс держит 3619 файлов.

2) Поправить в /etc/sysctl.conf:

fs.epoll.max_user_instances = 10000
fs.file-max = 70000

Первый параметр специфичен для java.nio сокетов. Перезагрузка параметров из sysctl.conf:

sysctl -p
Личные инструменты