Como reduzir o uso de memória do ClamAV?

20

Estou executando um servidor da Web baseado em Ubuntu (Apache, MySQL) em um VPS de 512 MB. Isso é mais do que suficiente para o site que está sendo executado (pequeno fórum).

Como eu queria adicionar alguma proteção contra vírus, eu instalei o ClamAV e o usei para verificar os arquivos enviados como parte do script de manipulação de upload (PHP).

Estou executando o serviço clamav-daemon para que as definições não precisem ser carregadas toda vez que um arquivo for varrido. Uma desvantagem dessa prática parece ser a "enorme" quantidade de memória usada pelo serviço clamav-daemon: > 200 MB. Isso já resultou no serviço sendo forçado a parar e os uploads sendo rejeitados.

Eu posso simplesmente atualizar a memória do VPS para 1024MB, mas eu quero saber se existe uma maneira de reduzir o uso de memória do ClamAV, por exemplo, não carregando definições indesejadas.

    
por Niels R. 11.02.2014 / 11:46

3 respostas

7

O ClamAV mantém as strings de pesquisa usando os algoritmos clássicos de string (Boyer Moore) e expressão regular (Aho Corasick). Sendo algoritmos da década de 1970, eles são extremamente eficientes em termos de memória.

O problema é o grande número de assinaturas de vírus. Isso faz com que as estruturas de dados dos algoritmos cresçam bastante.

Você não pode enviar essas estruturas de dados para trocar, pois não há partes das estruturas de dados dos algoritmos acessadas com menos frequência que outras partes. Se você forçar as páginas deles a trocarem o disco, eles serão referenciados momentos depois e simplesmente voltarão para o local. (Tecnicamente, dizemos que "o acesso aleatório da estrutura de dados força toda a estrutura de dados a estar no conjunto de memória do processo) ".)

As estruturas de dados são necessárias se você estiver digitalizando a partir da linha de comando ou digitalizando a partir de um daemon.

Você não pode usar apenas uma parte das assinaturas de vírus, pois você não pode escolher quais vírus você será enviado e, portanto, não saberá quais assinaturas precisará.

Aqui está a memória usada em uma máquina de 32 bits rodando Debian Wheezy e é clamd.

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

Editar: vejo alguém sugerindo configurar o tamanho do conjunto de residentes. Se isso for bem sucedido, ter um tamanho de conjunto residente menor que o tamanho do conjunto de trabalho levará o processo a ser debatido de e para a troca. Isso reduzirá substancialmente todo o desempenho do sistema. Em qualquer caso, a página de manual do Linux para setrlimit (RLIMIT_RSS, ...) diz que configurar o tamanho do conjunto residente não é mais suportado e nunca teve nenhum efeito em processos que optaram por não chamar o dispositivo (MADV_WILLNEED, ...). p>     

por 21.04.2016 / 15:16
1

Eu encontrei um problema parecido com o clamd em uma pequena caixa NAS doméstica com apenas 512MB. A partir de uma pesquisa de perguntas através da rede, parece que não há como reduzir o uso da memória. O banco de dados de coisas desagradáveis continua ficando cada vez maior.

É possível configurar o clamav para ser executado no modo não-daemon instalando o "clamav" ao invés do "clamav-daemon". Isso pode permitir que você tenha mais memória na maior parte do tempo. Quando você digitaliza os uploads, sempre vai precisar de uma grande quantidade de RAM.

    
por 26.04.2014 / 19:41
1

Editar 1:
Esta resposta não é verificada e pode não funcionar. Ele também não responde a como reduzir o uso de memeory, mas a como limitar o uso de memória, o que é um pouco diferente.

Você pode editar o script clamAV init (int /etc/init.d/ para adicionar o comando ulimit -m amountofram .
Isso limitará a possibilidade de clamAV e você provavelmente trocará, o que provavelmente irá desacelerar todo o seu sistema.     
por 11.02.2014 / 12:28