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

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

(Различия между версиями)
Перейти к: навигация, поиск
 
(3 промежуточные версии не показаны)
Строка 5: Строка 5:
bill      soft    nofile  10000                                                                                                                                                                                                                           
bill      soft    nofile  10000                                                                                                                                                                                                                           
bill      hard    nofile  10000
bill      hard    nofile  10000
-
</pre>
+
</pre> где bill - имя пользователя, под которым работают приложения биллинга.
 +
 
 +
== Для новых систем с systemd и mysql ==
 +
Параметр выставляется так :
 +
<source lang="bash">
 +
в/etc/systemd/system/
 +
лежит файл mysql.service
 +
в секцию [Service] дописал LimitNOFILE=2048, далее
 +
systemctl daemon-reload
 +
systemctl restart mysql
 +
</source>
 +
 
 +
 
 +
[https://www.linux.org.ru/forum/general/11588824?cid=11589383 linux.org.ru]
 +
 
 +
 
 +
== Как узнать сколько файлов съел процесс==
 +
 
 +
На примере mysql, узнаем код процесса, потом находим сколько файлов держит
 +
<source lang="bash">
 +
[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
 +
</source>
 +
процесс держит 3619 файлов.
 +
 
2) Поправить в '''/etc/sysctl.conf''':
2) Поправить в '''/etc/sysctl.conf''':
<pre>
<pre>
fs.epoll.max_user_instances = 10000
fs.epoll.max_user_instances = 10000
-
fs.file-max = 20000
+
fs.file-max = 70000
</pre>
</pre>
Первый параметр специфичен для java.nio сокетов.  
Первый параметр специфичен для java.nio сокетов.  

Текущая версия на 08:15, 17 мая 2018

Для 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
Личные инструменты