FastNetMon

пятница, 13 ноября 2009 г.

Too many open files, как победить?

Конфигурация лимитов файловой системы на число открытых файл

Конфигурация ядра (пункт не обязательный, но на сильно нагруженных системах необходимо)


Нам надо изменить параметр:
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 надо РЕБУТИТЬ СИСТЕМУ!!!!! ОН не подхватывает настройки на лету (а кто расскажет, как это сделать на лету, получит плюшку).

8 комментариев :

  1. limits.conf - это PAM, поэтому, я так понимаю, достаточно перелогиниться.

    ОтветитьУдалить
  2. Да, благодарю, после релогина применяется новое значение.

    ОтветитьУдалить
  3. Этот комментарий был удален автором.

    ОтветитьУдалить
  4. можно задать параметр на лету
    ulimit -n 999999

    ОтветитьУдалить
  5. Этот комментарий был удален автором.

    ОтветитьУдалить
  6. Лучше поздно, чем никогда. Чтобы оно воткнулось на лету. Просто перевойдите. То есть, закройте баш сессию, и снова ее откройте и настройки применяться.

    ОтветитьУдалить

Примечание. Отправлять комментарии могут только участники этого блога.