O número na coluna VIRT não significa que toda a memória não é realmente usada, é apenas marcada como alocada. Programas Java tendem a alocar muito espaço virtual.
Às vezes isso pode ser um pouco confuso; por padrão, o kernel do Linux permite que os programas comprometam a memória - ou seja, aloquem mais memória do que a disponível no sistema. Isso é o mesmo que provedores de e-mail fornecem gigabytes e gigabytes de espaço de e-mail gratuito, porque eles sabem / esperam que nem todo mundo realmente use tanto espaço, mas apenas uma fração dele.
Quanto excesso de permissão é permitido? Em distribuições típicas, as configurações padrão são usar o modo vm.overcommit_memory=0
, o que significa que o kernel Linux usa algumas heurísticas para determinar essa quantidade. Verifique o valor que você definiu agora com sysctl vm.overcommit_memory
Se for 0 e você quiser alterar o comportamento do kernel para "Não permitir que ocorram over-commiting", adicione essas linhas a /etc/sysctl.conf :
vm.overcommit_memory=2
vm.overcommit_ratio=0
Depois de dar o comando sudo sysctl -p
, as novas configurações serão carregadas.
Mas o que essas linhas significam?
vm.overcommit_memory=2
altera o modelo de supercomprometimento de heurística para valor definido pelo usuário.
vm.overcommit_ratio=0
é a porcentagem de memória com permissão para excesso de confirmação. Zero significa que não é permitido o excesso de confirmação.
Mas, se você quiser permitir cerca de 2 gigabytes de over-committing no seu caso, então
vm.overcommit_memory=2
vm.overcommit_ratio=50
faria isso.