Comment réduire l'utilisation de la mémoire ClamAV?

26

J'utilise un serveur Web basé sur Ubuntu (Apache, MySQL) sur un VPS de 512 Mo. C'est plus que suffisant pour le site Web qu'il exécute (petit forum).

Comme je voulais ajouter une protection contre les virus, j'ai installé ClamAV et l'ai utilisé pour analyser les fichiers téléchargés dans le cadre du script de gestion de téléchargement (PHP).

J'exécute le service clamav-daemon afin que les définitions n'aient pas à être chargées à chaque fois qu'un fichier est analysé. Un inconvénient de cette pratique semble être la "grande" quantité de mémoire utilisée par le service clamav-daemon:> 200 Mo. Cela a déjà entraîné l'arrêt du service et le rejet des téléchargements.

Je peux simplement mettre à niveau la mémoire du VPS à 1024 Mo, mais je veux savoir s'il existe un moyen de réduire l'utilisation de la mémoire de ClamAV en ne chargeant par exemple pas les définitions indésirables.

Niels R.
la source

Réponses:

15

ClamAV contient les chaînes de recherche à l'aide des algorithmes de chaîne classique (Boyer Moore) et d'expression régulière (Aho Corasick). Étant des algorithmes des années 1970, ils sont extrêmement efficaces en mémoire.

Le problème est le grand nombre de signatures de virus. Cela entraîne une augmentation assez importante des infrastructures de données des algorithmes.

Vous ne pouvez pas envoyer ces infrastructures de données à échanger, car aucune partie des infrastructures de données des algorithmes n'est utilisée moins souvent que les autres. Si vous en forcez des pages à échanger le disque, elles seront référencées quelques instants plus tard et reviendront juste directement dedans. ".)

Les infrastructures de données sont nécessaires si vous numérisez à partir de la ligne de commande ou numérisez à partir d'un démon.

Vous ne pouvez pas utiliser seulement une partie des signatures de virus, car vous ne pouvez pas choisir les virus qui vous seront envoyés et ne pouvez donc pas savoir de quelles signatures vous aurez besoin.

Voici la mémoire utilisée sur une machine 32 bits exécutant Debian Wheezy et c'est clamd.

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

Edit: je vois que quelqu'un suggère de définir la taille de l'ensemble résident. Si cela réussit, le fait d'avoir une taille de jeu résidente inférieure à la taille du jeu de travail entraînera le thrashing du processus vers et depuis le swap. Cela réduira considérablement l'ensemble des performances du système. Dans tous les cas, la page de manuel Linux pour setrlimit (RLIMIT_RSS, ...) indique que la définition de la taille de l'ensemble résident n'est plus prise en charge et n'a jamais eu d'effet sur les processus qui ont choisi de ne pas appeler madvise (MADV_WILLNEED, ...).

vk5tu
la source
1

J'ai rencontré un problème similaire en exécutant clamd sur une petite boîte NAS domestique avec seulement 512 Mo. D'après une enquête sur des questions sur le net, il semble qu'il n'y ait aucun moyen de réduire l'utilisation de la mémoire. La base de données des choses désagréables ne cesse de s'agrandir.

Il est possible de configurer clamav pour qu'il s'exécute en mode non démon en installant "clamav" plutôt que "clamav-daemon". Cela peut vous permettre d'avoir plus de mémoire la plupart du temps. Lorsque vous numérisez des téléchargements, il aura toujours besoin d'un gros morceau de RAM.

davefiddes
la source
1
Le principal inconvénient de cette approche est qu'il faudra plus de temps pour effectuer l'analyse. Chaque fois qu'un fichier est téléchargé, la base de données doit être chargée avant que l'analyse puisse être effectuée. Le chargement de la base de données prend beaucoup de minutes précieuses si vous voulez avoir une réponse rapide pour l'utilisateur. De plus, lorsque plusieurs téléchargements sont traités en même temps, plusieurs threads chargent la base de données, ce qui entraîne une utilisation encore plus importante de la RAM. D'où l'utilisation du démon. Ma solution était de mettre à niveau mon service VPS et de payer 5 USD / mois supplémentaires pour la RAM supplémentaire. Je peux vivre avec cette augmentation de coût :)
Niels R.
1

Cette réponse n'est pas vérifiée et peut ne pas fonctionner. Il ne explique pas non plus comment réduire l'utilisation de la mémoire, mais comment limiter l'utilisation de la mémoire, ce qui est un peu différent.


Vous pouvez éditer le script d'initialisation ClamAV (int /etc/init.d/pour ajouter la commande ulimit -m amountofram.
Cela limitera la possibilité de ClamAV et vous échangerez probablement ce qui ralentira probablement votre système entier.

Kiwy
la source