Incompatibilidade entre Java e cgroups v2


Nos sistemas mais recentes, o gerenciamento de recursos no Linux é feito pelo cgroups v2, um sistema que controla a alocação de CPU, memória e outros recursos para processos.

No entanto, versões mais antigas do JDK ainda não possuem suporte completo para essa nova arquitetura, o que pode resultar no erro:

"Cannot invoke 'jdk.internal.platform.CgroupInfo.getMountPoint()' because 'anyController' is null"

Esse erro ocorre porque o Java espera encontrar a estrutura do cgroups v1, que foi substituída pelo cgroups v2 no systemd v256+. Como resultado, a JVM falha ao obter informações de controle de recursos, afetando a execução de aplicações.

Solução

Para contornar essa incompatibilidade, é necessário utilizar uma versão do JDK que tenha suporte adequado ao cgroups v2. As versões JDK 17.0.4+ já incluem essa compatibilidade, garantindo que o gerenciamento de recursos funcione corretamente.

Porém, ferramentas populares de gerenciamento de versões, como ASDF e Mise, atualmente só oferecem suporte até a versão JDK 17.0.2 do OpenJDK para a família 17, que ainda apresenta essa limitação. Para resolver o problema, a solução é instalar manualmente a versão Zulu JDK 17.56.15, que já inclui os ajustes necessários para rodar corretamente com cgroups v2.

Passos para Resolver

1. Remova versões antigas do JDK 17 instaladas via Mise

$ mise rm java@openjdk17.0.2

2. Instale a versão correta do Zulu JDK

$ mise use -g java@zulu-17.56.15

3. Verifique se a versão está correta

java -version

Após essas configurações, a JVM será executada corretamente sem erros relacionados ao cgroups v2, garantindo compatibilidade total com os sistemas mais recentes.

Referências


https://wiki.archlinux.org/title/Cgroups#Enable_cgroup_v1