Как уменьшить использование памяти ClamAV?

На основе вопросов @Gilles спрошенный в комментариях к моему исходному вопросу я понял что kill -2 команда, которую я отправлял, предназначалась для pid сценария обертки, который запустил приложение вместо процесса, который обрабатывает сам сигнал.

Используя pids от моего вопроса, kill -s 13405 правильно не сигнализировал о приложении, но вызове kill -s 13509 работы как ожидалось.

Теперь мой вопрос состоит в том, как я могу обновить свой сценарий обертки для распространения SIGINT к его дочерним процессам, но я создам отдельный вопрос для этого.

26
11.02.2014, 12:46
3 ответа

ClamAV поддерживает строки поиска, используя классические алгоритмы строк (Бойер Мур) и регулярных выражений (Ахо Корасик). Будучи алгоритмами 1970-х годов, они чрезвычайно эффективны в памяти.

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

Вы не можете отправить эти структуры данных на замену, так как нет частей структур данных алгоритмов, доступных реже, чем к другим частям. Если вы заставите страницы с ними поменять диски, то через несколько минут на них будут ссылаться и просто переключать обратно. (Технически мы говорим: «Произвольный доступ к структуре данных заставляет всю структуру данных находиться в рабочем наборе памяти процесса».)

Структуры данных необходимы, если вы сканируете из командной строки или сканируете с демона.

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

Вот память, используемая на 32-разрядной машине под управлением Debian Wheezy, и она зажмо.

# ps_mem.py 
 Private  +   Shared  =  RAM used   Program
281.7 MiB + 422.5 KiB = 282.1 MiB   clamd

Правка: Я вижу, что кто-то предлагает установить размер резидентного набора. Если это удастся, то наличие размера резидентного набора, меньшего размера рабочего набора, приведет к тому, что процесс будет метаться в своп и из него. Это существенно снизит производительность всей системы. В любом случае на странице руководства Linux для setrlimit(RLIMIT_RSS, ...) говорится, что установка размера резидентного множества больше не поддерживается и никогда не влияла на процессы, которые решили не вызывать madvise(MADV_WILLNEED, ...).

16
27.01.2020, 19:40

Этот ответ не проверяется, и он не мог бы работать. Это также не отвечает, как уменьшить использование памяти, но как ограничить использование памяти, которое несколько отличается.


Можно отредактировать сценарий ClamAV init (интервал /etc/init.d/ добавить команду ulimit -m amountofram.
Это ограничит возможность ClamAV, и Вы, вероятно, подкачаете, который, вероятно, замедлит Вашу целую систему.
1
27.01.2020, 19:40
[115106]Я столкнулся с похожей проблемой, запустив clamd на маленьком домашнем NAS-боксе всего лишь с 512МБ. Из опроса вопросов по всей сети кажется, что нет никакого способа уменьшить использование памяти. База данных неприятных вещей становится всё больше и больше.

  • Можно настроить работу clamav в недемонстрационном режиме, установив "clamav", а не "clamav-daemon". Это может позволить вам иметь больше памяти большую часть времени. При сканировании загружаемых файлов всегда будет требоваться большой объем оперативной памяти.[115109].
2
27.01.2020, 19:40

Теги

Похожие вопросы