Як зменшити використання пам'яті ClamAV?


26

Я запускаю веб-сервер на базі Ubuntu (Apache, MySQL) на VPS 512 Мб. Цього більш ніж достатньо для веб-сайту, на якому він працює (невеликий форум).

Оскільки я хотів додати деякий захист від вірусів, я встановив ClamAV і використовую його для сканування завантажених файлів як частини сценарію обробки завантаження (PHP).

Я запускаю службу clamav-daemon, тому визначення не потрібно завантажувати кожного разу при скануванні файлу. Одним із недоліків цієї практики є "величезний" об'єм пам'яті, використовуваний службою clamav-daemon:> 200 Мб. Це вже призвело до того, що послугу змусили зупинити, а завантаження відхилити.

Я можу просто оновити пам'ять VPS до 1024 Мб, але хочу знати, чи є спосіб зменшити використання пам'яті ClamAV, наприклад, не завантажуючи небажані визначення.

Відповіді:


15

ClamAV тримає рядки пошуку, використовуючи класичний рядок (Boyer Moore) та алгоритми регулярного вираження (Aho Corasick). Будучи алгоритмами 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, ...).


1

Я зіткнувся з подібною проблемою під керуванням на невеликій домашній коробці NAS з лише 512 Мб. З огляду запитань у мережі, схоже, що немає жодного способу зменшити використання пам'яті. База даних неприємних речей просто збільшується та збільшується.

Можна налаштувати clamav для запуску в недемоновому режимі, встановивши "clamav", а не "clamav-daemon". Це може давати вам більше пам’яті більшу частину часу. Під час сканування завантажень завжди знадобиться великий фрагмент оперативної пам’яті.


1
Основним недоліком такого підходу є те, що для сканування знадобиться більше часу. Кожен раз, коли файл завантажується, базу даних потрібно завантажувати до того, як можна виконати сканування. Завантаження db займає багато цінних хвилин, якщо ви хочете отримати швидку відповідь для користувача. Крім того, коли обробляється декілька завантажень одночасно, ви будете завантажувати базу даних декількома потоками, що призводить до ще більшого використання оперативної пам'яті. Звідси і використання демона. Моїм рішенням було оновити мій сервіс VPS і заплатити додаткові 5 USD / місяць за додаткову оперативну пам’ять. Я можу жити з цим збільшенням витрат :)
Niels R.

1

Ця відповідь не перевірена і може не спрацювати. Він також не відповідає як зменшити використання пам'яті, але як обмежити використання пам'яті, що дещо відрізняється.


Ви можете відредагувати сценарій init ClamAV (int /etc/init.d/для додавання команди ulimit -m amountofram.
Це обмежить можливість ClamAV, і ви, ймовірно, поміняєтеся, що, ймовірно, сповільнить всю вашу систему.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.