ClamAV contiene las cadenas de búsqueda utilizando los algoritmos de cadenas clásicas (Boyer Moore) y expresiones regulares (Aho Corasick). Al ser algoritmos de la década de 1970, son extremadamente eficientes con la memoria.
El problema es la gran cantidad de firmas de virus. Esto lleva a que las estructuras de datos de los algoritmos crezcan bastante.
No puede enviar esas estructuras de datos para intercambiar, ya que no hay partes de las estructuras de datos de los algoritmos a las que se acceda con menos frecuencia que a otras partes. Si fuerza páginas de ellos para intercambiar el disco, se hará referencia a ellos momentos después y simplemente se volverán a intercambiar. (Técnicamente, decimos "el acceso aleatorio de la estructura de datos obliga a que toda la estructura de datos esté en el conjunto de memoria de trabajo del proceso ".)
Las estructuras de datos son necesarias si está escaneando desde la línea de comandos o escaneando desde un demonio.
No puede usar solo una parte de las firmas de virus, ya que no puede elegir qué virus se le enviarán y, por lo tanto, no puede saber qué firmas necesitará.
Esta es la memoria utilizada en una máquina de 32 bits que ejecuta Debian Wheezy y es clamd.
# ps_mem.py
Private + Shared = RAM used Program
281.7 MiB + 422.5 KiB = 282.1 MiB clamd
Editar:Veo que alguien sugiere establecer el tamaño del conjunto residente. Si esto tiene éxito, tener un tamaño de conjunto residente menor que el tamaño del conjunto de trabajo hará que el proceso se desplace hacia y desde el intercambio. Esto reducirá sustancialmente el rendimiento de todo el sistema. En cualquier caso, la página del manual de Linux para setrlimit(RLIMIT_RSS, ...) dice que configurar el tamaño del conjunto residente ya no se admite y nunca tuvo ningún efecto en los procesos que optaron por no llamar a madvise(MADV_WILLNEED, ...).
Esta respuesta no está verificada y podría no funcionar. Tampoco responde cómo reducir el uso de la memoria, sino cómo limitar el uso de la memoria, que es un poco diferente.
Puede editar el script de inicio de ClamAV (int/etc/init.d/
para agregar el comando ulimit -m amountofram
. Limitará la posibilidad de ClamAV y probablemente cambiará, lo que probablemente ralentizará todo su sistema.
Me encontré con un problema similar al ejecutar clamd en una pequeña caja NAS doméstica con solo 512 MB. A partir de una encuesta de preguntas en la red, parece que no hay forma de reducir el uso de la memoria. La base de datos de cosas desagradables sigue creciendo más y más.
Es posible configurar clamav para que se ejecute en modo no daemon instalando "clamav" en lugar de "clamav-daemon". Esto puede permitirle tener más memoria la mayor parte del tiempo. Cuando escanea cargas, siempre necesitará una gran cantidad de RAM.