Наш провайдер rinet
UnixFAQ.ru
   :: Поиск  
   :: Самые новые ::

   :: Самые читаемые ::
   :: Реклама ::
Моторные яхты Bluewater Yachts - моторные яхты.
moscow serviced apartments

Начало
Сетевая часть
HTTP Proxy
Squid

Не хватает файловых дескрипторов

 Это бывает, когда появляется сообщение Too many open files. Возможно из-за операционной системы с низким числом файловых дескрипторов. Этот предел обычно можно задать в ядре или при помощи других средств. Существует два пути исчерпать лимит файловых дескрипторов: первый, это лимит на каждый процесс, второй - на общее число дескрипторов на все процессы.

Для Linux, есть патч filehandle.patch.linux от Michael O'Reilly .

Для Solaris, добавьте следующее в файл /etc/system:

set rlim_fd_max = 4096
set rlim_fd_cur = 1024

Также следует задать #define SQUID_FD_SETSIZE в include/config.h в то же значение, что и rlim_fd_max. Не следует задавать меньше 4096.

Solaris select(2) позволяет задать только 1024 дескриптора, если надо больше отредактируйте src/Makefile и разрешите $(USE_POLL_OPT). Потом пересоберите squid.

Для FreeBSD (от Torsten Sturm ):

Как узнать максимальное значение файловых дескрипторов?
По команде sysctl -a значение kern.maxfilesperproc.
Как их увеличить?
sysctl -w kern.maxfiles=XXXX

sysctl -w kern.maxfilesperproc=XXXX
Внимание: Увеличивая значения, учитывайте соотношение maxfiles > maxfilesperproc.
Какой верхний предел?
Я не думаю, что есть формальное ограничение внутри ядра. Ведь структуры под данные выделяются динамически. На практике же, могут возникать непонятные явления (например, ядро будет тратить слишком много времени на поиск в таблицах).
Для большинства BSD-систем (SunOS, 4.4BSD, OpenBSD, FreeBSD, NetBSD, BSD/OS, 386BSD, Ultrix) можно решить задачу "в лоб" (требуется пересборка ядра):
Как узнать максимальное значение файловых дескрипторов?
По команде pstat -T значение files, обычно отображаемое как отношение current/maximum.
Как увеличить это значение?
Первый метод - увеличить значение переменной maxusers в конфигурации ядра и пересобрать его. Это очень быстрый и простой метод, но приводит к увеличению ряда других переменных, менять которые Вам может и не надо.
А существует более точный способ?
Найти файл param.c в исходниках ядра и изменить соотношение между maxusers и максимальным числом открытых файлов по нижеприведенным выражениям.
Вот несколько примеров:
SunOS
Измените значение nfile в /usr/kvm/sys/conf.common/param.c меняя значения в этом выражении:

int nfile = 16 * (NPROC + 16 + MAXUSERS) / 10 + 64;
Где NPROC определяется как:
#define NPROC (10 + 16 * MAXUSERS)
FreeBSD (начиная с ядра 2.1.6)
Очень похоже на SunOS, отредактируйте /usr/src/sys/conf/param.c вычислив соотношение между переменными maxusers, maxfiles и maxfilesperproc:

int maxfiles = NPROC*2;
int maxfilesperproc = NPROC*2;
Где NPROC задан как:
#define NPROC (20 + 16 * MAXUSERS)
Ограничение числа дескрипторов на процесс также может быть задано в конфигурации ядра этой директивой:
options OPEN_MAX=128
BSD/OS (начиная с ядра 2.1)
Поправьте /usr/src/sys/conf/param.c и задайте maxfiles в соответствии с:

int maxfiles = 3 * (NPROC + MAXUSERS) + 80;
Где NPROC задан как:
#define NPROC (20 + 16 * MAXUSERS)
Также следует задать значение OPEN_MAX, чтобы изменить ограничение числа дескрипторов на процесс.
Замечание: После пересборки ядра необходимо откомпилировать заново Squid. Конфигурационный скрипт Squid'а определяет сколько файловых дескрипторов доступно, так что надо запустить скрипт заново. Например:
    cd squid-1.1.x
    make realclean
    ./configure --prefix=/usr/local/squid
    make


Создано: Gleb Smirnoff

   :: Новости ::

Сайт снова оживлен на новой площадке.

sem, 22.11.2008

Новый участник проекта - Сергей Матвейчук

glebius, 30.01.2005

Новый участник проекта - Владимир Савкин

glebius, 24.01.2004

Сайт переехал на новую площадку. Теперь услуги co-location предоставляются компанией Best Telecommunications, за что им огромное спасибо.

glebius, 05.09.2003

Новый участник проекта - Андрей Павлов

glebius, 29.07.2002

Сайт вернулся к жизни. Два месяца назад отказал жесткий диск, до этого работавший безотказно и не подавая никаких признаков скорой смерти. Тк я по жизни разгильдяй, то бэкапа не было. Однако нашлись добрые люди, которые подкинули свои мирроры и кэши, и как видите, мы снова живем. Огромное человеческое спасибо Константину Елапину, Дмитрию Тейблюму и Александру Дилевскому из Яндекса, а также vasilich@softhome.net и kx@usp.ru.
Новый дизайн сайта сделал Андрей Селиванов.

glebius, 20.07.2002