ClamAV contient les chaînes de recherche à l'aide des algorithmes de chaînes classiques (Boyer Moore) et d'expressions régulières (Aho Corasick). Étant des algorithmes des années 1970, ils sont extrêmement efficaces en termes de mémoire.
Le problème est le grand nombre de signatures de virus. Cela conduit à une croissance assez importante des structures de données des algorithmes.
Vous ne pouvez pas envoyer ces structures de données à échanger, car aucune partie des structures de données des algorithmes n'est consultée moins souvent que d'autres parties. Si vous forcez des pages d'entre eux à échanger le disque, ils seront référencés quelques instants plus tard et reviendront directement. (Techniquement, nous disons que "l'accès aléatoire de la structure de données force la structure de données entière à être dans l'ensemble de travail de la mémoire du processus ".)
Les structures de données sont nécessaires si vous numérisez à partir de la ligne de commande ou à partir d'un démon.
Vous ne pouvez pas utiliser uniquement une partie des signatures de virus, car vous ne pouvez pas choisir les virus qui vous seront envoyés et ne pouvez donc pas déterminer les signatures dont vous aurez besoin.
Voici la mémoire utilisée sur une machine 32 bits exécutant Debian Wheezy et c'est calme.
# 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 d'ensemble résident inférieure à la taille de l'ensemble de travail entraînera une accélération du processus vers et depuis l'échange. Cela réduira considérablement les performances du système entier. 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, ...).
Cette réponse n'est pas vérifiée et cela pourrait ne pas fonctionner. Il n'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 modifier le script d'initialisation de 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 tout votre système.
J'ai rencontré un problème similaire en exécutant clamd sur un petit boîtier NAS domestique avec seulement 512 Mo. D'après une enquête de 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 grossir.
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 analysez des téléchargements, vous aurez toujours besoin d'une grande quantité de RAM.