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

8. Память

8.1 Почему Squid использует так много памяти!?

Squid использует большое количество памяти по соображениям производительности. Операция чтение с диска отнимает намного болше времени, чем чтение напрямую из памяти.

Небольшой индекс для каждого объекта сохраняется в памяти. Это стурктура данных StoreEntry. Для Squid-2 - это 56 байт на "малых" архитектур (Intel, Sparc, MIPS и т.п.) и88-bytes on "больших" архитектур (Alpha). В добавок к этому с каждой записью в StoreEntry связян 16-байтный ключ (контрольная сумма MD5). Это означает, что необходимо 72 или 104 байта памяти для хранения индекса каждого объекта в вашем кеше. Для кеша, содержащего 1,000,000 объектов требуется 72 МБ памяти только под индекс. На практике может потребоваться намного больше.

Squid-1.1 также использует большое кол-во памяти для хранения транзитных объектов. Эта версия Squid, хранит входящие объекты исключительно в памяти, пока их передача не закончится. Только после этого прокси решает сохранять объект на диске или нет. Это значит, что когда пользователь загружает большой файл, использование памяти существенно возрастает. Параметрmaximum_object_size в squid.conf определяет сколько памяти для транзитного объекта может быть израсходовано, перед тем ,как его пометить как некешируемый. Когда объект помечается как некешируемый, больше нет необходимости хранить его в памяти полностью, поэтому память освобождается от части объекта, которая уже была передана клиенту. Другими словами, уменьшение maximum_object_size также уменьшает использование памяти в Squid-1.1.

Squid также использует память для других целей, а именно:

  • Дисковые буфера для чтения/записи

  • Сетевые буфера ввода/вывода (I/O)

  • Содержимое IP-кеша

  • Содержимое FQDN-кеша

  • База данных Netdb ICMP measurement

  • Статистическая иформация для каждого запроса, включая полный запрос и заголовок ответа

  • Различная статистическая информация.

  • ``Горячие объекты'', которые сохраняются в памяти.

8.2 Как мне узнать сколько памяти использует мой процесс Squid ?

Проще всего посмотреть, что выдает команда ps в вашей системе. Для BSD-систем вам возможно захочется использовать ключ -u и обратить внимание на поля VSZ и RSS:

wessels ~ 236% ps -axuhm

USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND

squid 9631 4.6 26.4 141204 137852 ?? S 10:13PM 78:22.80 squid -NCYs

Для SYSV-систем, вам возможно потребуется использовать ключ -l. Прежде чем использовать ps, проверьте наличие этих ключей на странице руководства ps. Данные могут быть не слишко очевидными, если указаны к килобайтах или страницах (обычно 4 kb).

Наилучший способ проверки использования памяти - программа top:

last pid: 20128; load averages: 0.06, 0.12, 0.11 14:10:58

46 processes: 1 running, 45 sleeping

CPU states: % user, % nice, % system, % interrupt, % idle

Mem: 187M Active, 1884K Inact, 45M Wired, 268M Cache, 8351K Buf, 1296K Free

Swap: 1024M Total, 256K Used, 1024M Free

PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND

9631 squid 2 0 138M 135M select 78:45 3.93% 3.93% squid

И наконец, вы можете опросить можно непосредственно процесс Squid о используемом им кол-ве памяти. Эта информация доступна на странице info кеш-менеджера. Выходные данные могут варьироваться в зависимости от вашей операционной системы и версии Squid, но выглядят примерно так:

Resource usage for squid:

Maximum Resident Size: 137892 KB

Memory usage for squid via mstats():

Total space in arena: 140144 KB

Total free: 8153 KB 6%

Если значение RSS (Resident Set Size - резидентная часть) у вас намного меньше, чем размер процесса, то производительность вашего кеша скорее всего старадет из-за пайджинга.

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