Too many open files, как победить?
Конфигурация лимитов файловой системы на число открытых файл.
Конфигурация ядра (пункт не обязательный, но на сильно нагруженных системах необходимо)
Нам надо изменить параметр:
, обозначающий число одновременно открытых файлов
Текущее состояние числа открытых файлов можно узнать так:
по порядку он выдает три значения: число открытых в данный момент файлов; число открытых, но не используемых файлов; максимальное число открытых файлов
Открываем файл:
имена всех возможных параметров можно узнать так: sysctl -a
Нас интересует параметр: fs.file-max
Добавляем в файл следующую строку:
И вызываем для сохранения настроек:
Настраиваем ulimit
Текущее состояние настроек ulimit можно посмотреть: ulimit -a
Открываем файл:
и добавляем с него следующую строку:
Устанавливаем для текущего шелла ограничение: ulimit -n 999999
Перезапускаем апачу для применения настроек: /etc/init.d/httpd restart (или постфикс: /etc/init.d/postfix restart )
Заходим под юзером апача (или постфикса: su postfix -s /bin/sh) и удостоверяемся, что настройки новые:
После настройки limits.conf надо РЕБУТИТЬ СИСТЕМУ!!!!! ОН не подхватывает настройки на лету (а кто расскажет, как это сделать на лету, получит плюшку).
Конфигурация ядра (пункт не обязательный, но на сильно нагруженных системах необходимо)
Нам надо изменить параметр:
cat /proc/sys/fs/file-max
, обозначающий число одновременно открытых файлов
Текущее состояние числа открытых файлов можно узнать так:
cat /proc/sys/fs/file-nr
по порядку он выдает три значения: число открытых в данный момент файлов; число открытых, но не используемых файлов; максимальное число открытых файлов
Открываем файл:
vi /etc/sysctl.conf
имена всех возможных параметров можно узнать так: sysctl -a
Нас интересует параметр: fs.file-max
Добавляем в файл следующую строку:
fs.file-max = 999999
И вызываем для сохранения настроек:
/sbin/sysctl -p
Настраиваем ulimit
Текущее состояние настроек ulimit можно посмотреть: ulimit -a
Открываем файл:
sudo vi /etc/security/limits.conf
и добавляем с него следующую строку:
* - nofile 999999
Устанавливаем для текущего шелла ограничение: ulimit -n 999999
Перезапускаем апачу для применения настроек: /etc/init.d/httpd restart (или постфикс: /etc/init.d/postfix restart )
Заходим под юзером апача (или постфикса: su postfix -s /bin/sh) и удостоверяемся, что настройки новые:
su apache -s /bin/sh
ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 80064
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 999999
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 80064
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
После настройки limits.conf надо РЕБУТИТЬ СИСТЕМУ!!!!! ОН не подхватывает настройки на лету (а кто расскажет, как это сделать на лету, получит плюшку).
17.02.2015, 19:52 -
Категория: Статьи » Администрирование