FastNetMon

Friday 13 November 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 comments :

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

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

    ReplyDelete
  3. спасибо, полезная статья

    ReplyDelete
  4. Всегда пожалуйста :)

    ReplyDelete
  5. This comment has been removed by the author.

    ReplyDelete
  6. можно задать параметр на лету
    ulimit -n 999999

    ReplyDelete
  7. This comment has been removed by the author.

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

    ReplyDelete

Note: only a member of this blog may post a comment.