Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
squid.doc
Скачиваний:
9
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆

8.6 Значение ``Total memory accounted'' меньше, чем размер моего процесса Squid.

Мы не имеем возможности подсчитать всю используемую Squid-ом память. Это потребовало бы чрезмерного количества кода, чтобы отследить все до последнего байта. Мы думаем, что лучше подсчитывать основной расход памяти.

Также имейте ввиду, что функции malloc и free имеют собственные дополнительные расходы памяти. Некоторое дополнительное кол-во памяти требуется для хранения сведений о тех участках памяти, которые используются и которые свободны. Кроме того, большинство операционных систем не позволяют процессу уменьшаться в размере. Когда процесс освобождает память по вызову free, общий размер процесса не уменьшается. Так что размер процесса действительно представляет собой максимальный размер, которого достиг ваш процесс Squid.

8.7 Xmalloc: Unable to allocate 4096 bytes!

от Henrik Nordstrom

Сообщение типа "FATAL: xcalloc: Unable to allocate 4096 blocks of 1 bytes!" появляется, когда Squid больше не может захватить памяти и для большинства операционных систем (особенно BSD) это может быть вызвано только двумя причинами:

  1. На машине закончился своп

  2. Был достигнут максимальный лимит размера блока данных для процесса

В первом случае можно обнаружить проблему используя обычные средства мониторинга состояния вашего свапа доступные для вашей платформы. (pstat на SunOS, возможно pstat, используемый на BSD).

Чтобы выявить вариант номер два, необходимо убедиться, что это не есть первый случай, после чего чего необходимо отследить размер процесса Squid. Если процесс умирает при достижении определенного размера с прекращением свопинга, то максимальный размер сегмента данных достигнут без всяких сомнений.

Размер блока данных может быть ограничем двумя факторами:

  1. В ядре установлен максимум, который пользователь не может предолеть

  2. Установлен размер ulimit, который может контролироваться пользователем.

When squid starts it sets data and file ulimit's to the hard level. Если вы вручную отстраивали ulimit перед запуском Squid, то убедитесь, что вы указали жостки лимит, а не только мягкий (по умолчанию операции с ulimit меняют только мягкий лимит); root-у разрешено устанавливать мягкий лимит значением больше жесткого лимита.

Эта команда покажет жесткий лимит:

ulimit -aH

Эта команда установить неграниченный лимит для блока данных:

ulimit -HSd unlimited

BSD/OS

от Arjan de Vet

По умолчанию лимит блока данных установленный в ядре BSD/OS равен 64Мб (как минимум в 3.0, которую я использую).

Пересоберите ядро, установив больший размер блока данных:

maxusers 128

# Support for large inpcb hash tables, e.g. busy WEB servers.

options INET_SERVER

# support for large routing tables, e.g. gated with full Internet routing:

options "KMEMSIZE=\(16*1024*1024\)"

options "DFLDSIZ=\(128*1024*1024\)"

options "DFLSSIZ=\(8*1024*1024\)"

options "SOMAXCONN=128"

options "MAXDSIZ=\(256*1024*1024\)"

См. /usr/share/doc/bsdi/config.n для более подробной информации.

В файле /etc/login.conf у меня указано:

default:\

:path=/bin /usr/bin /usr/contrib/bin:\

:datasize-cur=256M:\

:openfiles-cur=1024:\

:openfiles-max=1024:\

:maxproc-cur=1024:\

:stacksize-cur=64M:\

:radius-challenge-styles=activ,crypto,skey,snk,token:\

:tc=auth-bsdi-defaults:\

:tc=auth-ftp-bsdi-defaults:

#

# Settings used by /etc/rc and root

# This must be set properly for daemons started as root by inetd as well.

# Be sure reset these values back to system defaults in the default class!

#

daemon:\

:path=/bin /usr/bin /sbin /usr/sbin:\

:widepasswords:\

:tc=default:

# :datasize-cur=128M:\

# :openfiles-cur=256:\

# :maxproc-cur=256:\

Указанного пространства должно хватить для обслуживания 256Мб-ного процесса squid.

FreeBSD (2.2.X)

от Duane Wessels

Процедура почти идентична тому, что описано выше для BSD/OS. Увеличьте значение лимита открытых файловых дескрипторов в /sys/conf/param.c:

int maxfiles = 4096;

int maxfilesperproc = 1024;

Увеличьте максимальный размер сегмента данных. а также его значение по умолчанию в файле конфигурации вашего ядра, к примеру /sys/conf/i386/CONFIG:

options "MAXDSIZ=(512*1024*1024)"

options "DFLDSIZ=(128*1024*1024)"

Мы также считаем необходимым увеличение кол-ва mbuf-кластеров:

options "NMBCLUSTERS=10240"

Если у вас более чем 256 Мб физической памяти. то вы можете отключить опцию BOUNCE_BUFFERS (whatever that is), закоментировав строку:

#options BOUNCE_BUFFERS #include support for DMA bounce buffers

Также измените лимит в /etc/login.conf:

# Settings used by /etc/rc

#

daemon:\

:coredumpsize=infinity:\

:datasize=infinity:\

:maxproc=256:\

:maxproc-cur@:\

:memoryuse-cur=64M:\

:memorylocked-cur=64M:\

:openfiles=4096:\

:openfiles-cur@:\

:stacksize=64M:\

:tc=default:

Не забывайте сделать ``cap_mkdb /etc/login.conf'' после редактирования этого файла.

OSF, Digital Unix

от Ong Beng Hui

Чтобы увелечить размер блока данных Digital UNIX, отредактируйте файл /etc/sysconfigtab и добавьте следующее...

proc:

per-proc-data-size=1073741824

Или в csh, используйте команду limit, примерно так

> limit datasize 1024M

После редактирования файла /etc/sysconfigtab требуется перезагрузка системы, в отличие от команды limit.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]