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

8.8 Fork: (12) Cannot allocate memory

Когда Squid перезапускается (SIGHUP) или производит ротацию своих журналов (SIGUSR1), то некторые вспомогательные процессы (dnsserver) должны быть убиты и запущены заново. Если вашей системе не хватает виртуальной памяти, то у процесса Squid может не получиться запуск новыйх вспомогательных процессов. Лучший способ исправить проблему - увеличить кол-во виртуальной памяти, добавив свап. Обычно ваша система использует специально размеченную партицию под своп, но большинство операционных систем таукже поддеривают сваппинг через обычные файлы (исключение - Digital Unix). См. руководства по swapswapon и mkfile для вашей системы.

8.9 Как я могу уменьшить размер используемой Squid-ом памяти ?

Если производительность вашего кеша недостаточна из-за органиченного кол-ва ОЗУ, вам возможно придеться докупить памяти. Но если для вас это не выход, то можете попробовать сделать следующее:

  • Попробуйте воспользоваться другой библиотекой malloc.

  • Уменьшите параметр cache_mem в файле конфигурации. Он контролирует как много ``горячих'' объектов хранится в памяти. Уменьшение этого параметра не отразится сильно на качестве работы, но вы можете получить предупреждение в вашем cache.log, если ваш кеш занят.

  • Установите memory_pools off в файле конфигурации. Это укажет Squid освобождать неиспользуемую память по вызову free() взамен того, чтобы удерживать ее для потенциального использования в будущем.

  • Уменьшите параметр cache_swap в вашем файле конфигурации. Это уменьшит кол-во хранимых Squid-ом объектов. Ваше общее отношение для хитов может немного уменьшиться, зато ваш кеш станет работать значительно производительней.

  • Уменьшите значение параметра maximum_object_size (только для Squid-1.1). Вы не сможете кешировать большие объекты и ваш byte volume hit ratio может уменьшиться, зато общая производительность Squid-а станет больше.

  • Если вы используете Squid-1.1.x, попробуйте версию ``NOVM''.

8.10 Использование альтерантивной библиотеки malloc.

Многие пользователи отмечают улучшение качества работы и утилизации памяти при использовании связки Squid с внешней билиотекой malloc. Мы рекомендуем GNU malloc или dlmalloc.

Использование GNU malloc

Чтобы Squid использовал GNU malloc проеделайте такие простые шаги:

  1. Загрузите исходники GNU malloc, которые доступны на зеркалах GNU FTP.

  2. Откомпилируйте GNU malloc

  3. % gzip -dc malloc.tar.gz | tar xf -

  4. % cd malloc

  5. % vi Makefile # edit as needed

  6. % make

  7. Скопируйте libmalloc.a в директорию, где лежат библиотеки вашей системы и убедитесь, что она называется libgnumalloc.a.

  8. % su

  9. # cp malloc.a /usr/lib/libgnumalloc.a

  10. (Optional) Скопируйте GNU malloc.h в директорию, где размещаются заголовочные файлы вашей системы и убедитесь, что он называется gnumalloc.h. В этом шаге нет необходимости, но если вы сделаете это, то Squid сможет использовать функцию mstat(), чтобы выдавать статистику по использованию памяти на информационной странице cachemgr.

  11. # cp malloc.h /usr/include/gnumalloc.h

  12. Переконфигурируйте и пересоберите Squid

  13. % make realclean

  14. % ./configure ...

  15. % make

  16. % make install

Заметьте, что в более поздних дистрибутивах 'realclean' был заменен на 'distclean'. После запуска конфигурационного скрипта, смотрите что он выводит на экран. Вы должны увидеть, что он обнаружил libgnumalloc.a и gnumalloc.h.

dlmalloc

Библиотека dlmalloc написана Doug Lea. Согласно высказываний самого Doug:

Это не самая быстрая, most space-conserving, самая портабельная, or most tunable из написанных когда-либо malloc. However it is among the fastest while also being among the most space-conserving, portable and tunable.

dlmalloc включена в дистрибутив Squid-2. Чтобы использовать эту библиотеку, просто укажите такую опцию скрипта configure:

% ./configure --enable-dlmalloc ...

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