Jak zmniejszyć zużycie pamięci ClamAV?

26

Korzystam z serwera WWW opartego na Ubuntu (Apache, MySQL) na 512 MB VPS. Jest to więcej niż wystarczające dla strony internetowej, którą prowadzi (małe forum).

Ponieważ chciałem dodać ochronę przed wirusami, zainstalowałem ClamAV i wykorzystałem go do skanowania przesłanych plików w ramach skryptu obsługi przesyłania (PHP).

Korzystam z usługi clamav-daemon, więc definicje nie muszą być ładowane przy każdym skanowaniu pliku. Minusem tej praktyki wydaje się być „ogromna” ilość pamięci wykorzystywanej przez usługę clamav-daemon:> 200 MB. To już spowodowało, że usługa została zmuszona do zatrzymania, a przesyłanie zostało odrzucone.

Mogę po prostu zaktualizować pamięć VPS do 1024 MB, ale chcę wiedzieć, czy istnieje sposób na zmniejszenie wykorzystania pamięci ClamAV, np. Przez nie ładowanie niepożądanych definicji.

Niels R.
źródło

Odpowiedzi:

15

ClamAV przechowuje ciągi wyszukiwania za pomocą klasycznych ciągów znaków (Boyer Moore) i algorytmów wyrażeń regularnych (Aho Corasick). Będąc algorytmami z lat siedemdziesiątych, są wyjątkowo wydajne pod względem pamięci.

Problemem jest ogromna liczba sygnatur wirusów. To powoduje, że struktury danych algorytmów stają się dość duże.

Nie można wysyłać tych struktur danych do wymiany, ponieważ nie ma części struktur danych algorytmów, do których dostęp jest rzadszy niż w innych częściach. Jeśli zmusisz ich strony do zamiany dysku, zostaną one przywołane chwilę później i po prostu zamieniają się z powrotem. (Technicznie mówimy „losowy dostęp do struktury danych zmusza całą strukturę danych do roboczego zestawu pamięci procesu „.)

Struktury danych są potrzebne, jeśli skanujesz z wiersza poleceń lub skanujesz z demona.

Nie możesz użyć tylko części sygnatur wirusów, ponieważ nie możesz wybrać wirusów, które zostaną wysłane, a zatem nie możesz powiedzieć, które sygnatury będą potrzebne.

Oto pamięć używana na 32-bitowej maszynie z systemem Debian Wheezy i jest to clamd.

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

Edycja: Widzę, że ktoś sugeruje ustawienie rozmiaru zestawu rezydenta. Jeśli to się powiedzie, to posiadanie rezydentnego rozmiaru zestawu mniejszego niż rozmiar zestawu roboczego doprowadzi do przerzucenia procesu do i od zamiany. Spowoduje to znaczne obniżenie wydajności całego systemu. W każdym razie strona podręcznika Linux dla setrlimit (RLIMIT_RSS, ...) mówi, że ustawienie rezydentnego rozmiaru zestawu nie jest już obsługiwane i nigdy nie miało żadnego wpływu na procesy, które zdecydowały się nie wywoływać madvise (MADV_WILLNEED, ...).

vk5tu
źródło
1

Mam podobny problem z uruchomieniem clamd na małym domowym urządzeniu NAS z zaledwie 512 MB. Z ankiety pytań w sieci wydaje się, że nie ma sposobu na zmniejszenie zużycia pamięci. Baza danych paskudnych rzeczy wciąż się powiększa.

Możliwe jest skonfigurowanie clamav do działania w trybie innym niż demon, instalując „clamav” zamiast „clamav-daemon”. Może to pozwolić na posiadanie większej ilości pamięci przez większość czasu. Podczas skanowania przesyłanych plików zawsze będzie potrzebować dużej ilości pamięci RAM.

davefiddes
źródło
1
Główną wadą tego podejścia jest to, że skanowanie zajmie więcej czasu. Za każdym razem, gdy plik jest przesyłany, baza danych musi zostać załadowana przed wykonaniem skanowania. Ładowanie db zajmuje dużo cennych minut, jeśli chcesz mieć szybką odpowiedź dla użytkownika. Ponadto, gdy przetwarzanych jest wiele przesyłania w tym samym czasie, będziesz mieć wiele wątków ładujących bazę danych, co spowoduje jeszcze większe wykorzystanie pamięci RAM. Stąd użycie demona. Moim rozwiązaniem było uaktualnienie mojej usługi VPS i zapłacenie dodatkowych 5 USD / miesiąc za dodatkową pamięć RAM. Mogę żyć z tym wzrostem kosztów :)
Niels R.
1

Ta odpowiedź nie jest zweryfikowana i może nie działać. Nie odpowiada również na pytanie, jak zmniejszyć zużycie pamięci, ale jak ograniczyć użycie pamięci, co jest nieco inne.


Możesz edytować skrypt inicjujący ClamAV (int, /etc/init.d/aby dodać polecenie ulimit -m amountofram.
Ograniczy to możliwość ClamAV i prawdopodobnie zamienisz się, co prawdopodobnie spowolni cały system.

Kiwy
źródło