Eu tenho uma caixa Linux de 8 GB de RAM na qual 4 servidores tomcat estão em execução. Um deles está definido para 3000 MB de memória (configuração de jvm -Xms e -Xmx) e outros estão definidos para 1500 MB. A partição de troca também é definida como 8Gigs. Quando inicio esses servidores, o uso do arquivo de troca é baixo. Porém, durante um período de dias e durante determinados períodos em que um / todos os servidores estão em atividade de pico, o uso de troca começa a aumentar. Aqui está uma saída típica sar -r.
kbmemfree kbmemused% kbbuffers memorizados kbcached kbswpfree kbswpused % swpused kbswpcad
48260 8125832 99,41 196440 2761852 7197688 1190912 14,20 316044
75504 8098588 99,08 198032 2399460 7197688 1190912 14,20 316032
Ele mostra 14,2% de swap usado atualmente. O engraçado é que esse% NUNCA diminui . Ele continua a aumentar e atingir até 30-40% . Reiniciamos nossos servidores semanalmente.
Eu assumiria que o % swpused aumentou durante períodos de atividade de pico e diminuiu durante períodos de atividade baixa .. Ou pelo menos permaneceu constante. Parece que o espaço de troca nunca é recuperado pelo sistema operacional.
Saída de livre: total -m total usado buffers compartilhados gratuitos armazenados em cache Mem: 7982 7937 45 0 32 2088 - / + buffers / cache: 5816 2166 Swap: 8191 1163 7028
Portanto, há pelo menos 2g de RAM grátis. Portanto, a pergunta é: Por que o espaço de troca continua aumentando e não está sendo recuperado pelo sistema operacional? Ou como depurar isso para descobrir o que está acontecendo.
fonte
Basicamente, você não precisa se preocupar com isso. O que é importante saber é quanto IO vai para a troca (dê uma olhada no comando 'vmstat'). Ter mais coisas na troca não custa nada. O único custo é colocar o material na troca (entrada da página) ou retirá-lo (saída da página). Portanto, é perfeitamente razoável que o SO deixe a troca crescer.
fonte
contanto que você tenha espaço de troca disponível, não há necessidade de o sistema operacional liberar espaço de troca. Será liberado quando não houver mais espaço. Mas quando você entra nessa situação, definitivamente tem um problema.
fonte
Não há como saber se isso acabará se tornando um problema, a menos que você execute um servidor por tempo suficiente para ver se ele se torna um problema.
Basicamente, o sistema operacional irá trocar coisas que não estão sendo usadas para manter alguma memória livre o tempo todo, caso um novo programa seja iniciado. O espaço de troca não será liberado até que seja necessário, o que significa que você pode ter 100% de espaço de troca usado e sem problemas de desempenho. O que mais preocupa é se isso está sendo causado por um vazamento de memória. Não é necessariamente um vazamento de memória, mas poderia ser.
Java não é propenso a vazamentos de memória, mas pode acontecer especialmente com aplicativos complicados.
fonte