Ubuntu 18.04. 2 GB de RAM + 512 MB de troca.
Ao executar o clamav, ele consome 800+mb de memória porque carrega todas as assinaturas na memória. Por causa disso, configurei para rodar todos os dias às 3 da manhã, em vez de continuar.
Até agora, tomcat e clamav se deram muito bem. Ontem à noite, às 3 da manhã, o serviço tomcat foi desligado quando o clamav começou a funcionar.
[4643256.375812] OOM killed process 8145 (clamscan) total-vm:1149268kB, anon-rss:969476kB, file-rss:4kB
[7667218.452649] OOM killed process 8865 (java) total-vm:4568248kB, anon-rss:1067312kB, file-rss:0kB
Mar 26 03:00:31 user systemd[1]: tomcat.service: Main process exited, code=killed, status=9/KILL
Mar 26 03:00:31 user systemd[1]: tomcat.service: Failed with result 'signal'.
Mar 26 03:17:08 user systemd[1]: Reloading The Apache HTTP Server.
Mar 26 03:17:08 user systemd[1]: Reloaded The Apache HTTP Server.
Eu sei que a atualização é uma resposta imediata, mas até lá, minhas perguntas são:
Existe uma maneira de executar o clamav sem consumir 800+mb?
Existe uma maneira de reiniciar automaticamente o tomcat se algo assim acontecer novamente?
O Java realmente levou 4.568.248kB = 4,5gb ou está faltando alguma coisa?
Edite dentro do arquivo tomcat.service, tenho o seguinte:
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom -Djava.awt.headless=true"
Java não usou 4,5 GiB de memória física, esse número se refere à memória virtual. Você tem cerca de 128 TiB de espaço de endereço de memória virtual (cf. esta resposta ) e é usado para acessar a memória física, mas também os arquivos como se estivessem na memória. A maior parte do espaço virtual alocado não usa nenhuma memória física e contém apenas
0
s ou pontos para dados presentes em discos rígidos.O que você está interessado é o número anon-rss : é a memória física usada pelo processo, principalmente para uso privado, e não é apenas um cache/cópia de um arquivo (diferente de file-rss ). O kernel não pode simplesmente deletar esta memória e você obtém um OOM.
A resposta de Janne à sua pergunta anterior aponta para uma solução para o seu problema:
Você deve ajustar as configurações de memória do Tomcat, o que pode ser feito adicionando opções à variável
JAVA_OPTS
em/etc/default/tomcat9
. Os mais comumente usados são-Xms
(tamanho mínimo de heap) e-Xmx
(tamanho máximo de heap). Por exemplo, você pode usar:A JVM usará entre 256 MiB e 1024 MiB de espaço de heap (além de outros tipos de memória Java) e poderá devolver parte dele, quando não for usada.
Sua quantidade de swap é bem pequena, especialmente se você não tiver muita memória RAM. Estenda-o para cerca de 4 GiB (cf. este artigo ) para que o kernel possa trocar alguma memória em vez de matar o Tomcat.
Para configurar uma reinicialização automática do Tomcat após uma falha, edite o
tomcat.service
arquivo:e adicione à
[Service]
seção, por exemplo:Você pode encontrar os valores possíveis
Restart
na documentação do SystemD .