Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

279
Visualizações
Configuración de memoria de Java en un contenedor docker

Tengo una aplicación Java, basada en Java8 OpenJDK. Se ejecuta en un contenedor docker que tiene un límite de 20 GB.

La configuración -Xms y -Xmx de tomcat se establece de la siguiente manera:

-Xms = 60 % de la memoria del contenedor (según lo dictado por cgroup), es decir, 12 GB -Xmx = 80 % de la memoria del contenedor (según lo dictado por cgroup), es decir, 16 GB

Esto deja 4 GB libres en el contenedor, lo que generalmente está bien, pero a veces, bajo carga, veo que el contenedor docker salió (y el proceso de Java se canceló) con OOM debido al hecho de que el uso de la memoria del contenedor superó los 20 GB.

Sé que la configuración -Xmx es para el montón, y no para todo el proceso de Java y JVM, por lo tanto, esperaría que el 'espacio libre' de 4 GB en el contenedor sea suficiente, pero parece que no.

Sé que todos los casos de uso son muy diferentes, pero mi pregunta es si, en términos generales, establecer la configuración -Xmx es demasiado alta para un contenedor cuyo límite de memoria es de 20 GB.

Estaba jugando con la idea de usar la configuración MaxRAM, que nuevamente, sé que solo dicta la memoria del montón, pero no estoy seguro de si eso tendría algún impacto en términos positivos.

¿Es generalmente el caso que usa MaxRAM o -Xmx, o hay algún beneficio al configurar ambos?

Si tuviera que usar MaxRAM en lugar de -Xmx, ¿cómo asignaría Java la memoria al montón? ¿Existe un algoritmo simple para esto, por ejemplo, el 50% de la configuración de MaxRAM? ¿Java administrará la memoria de manera más eficiente al hacerlo de esa manera?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

si, en términos generales, establecer la configuración -Xmx es demasiado alta para un contenedor cuyo límite de memoria es de 20 GB

Depende. Una aplicación puede usar menos RAM que el -Xmx especificado, así como 2 o 3 veces más RAM que el -Xmx especificado. He visto muchas aplicaciones de ambos tipos.

Vea lo que requiere memoria en un proceso de Java .

En lugar de tratar de adivinar un tamaño de almacenamiento dinámico adecuado en función del límite de contenedor dado (esos pueden no estar relacionados en absoluto), ¿por qué no establece -Xmx en el valor, que es lo suficientemente cómodo para su aplicación particular? Quiero decir, si su aplicación funciona bien con solo 8 GB de almacenamiento dinámico, no hay necesidad de darle más, incluso si el contenedor lo permite.

¿Es generalmente el caso que usa MaxRAM o -Xmx, o hay algún beneficio al configurar ambos?

Configurar ambos no tiene sentido, ya que Xmx anula MaxRAM .

Debía usar MaxRAM en lugar de -Xmx, ¿cómo asignaría Java la memoria al montón? ¿Existe un algoritmo simple para esto, por ejemplo, el 50% de la configuración de MaxRAM?

Consulte ¿Cuál es la diferencia entre los parámetros xmx y MaxRAM JVM?

¿Java administrará la memoria de manera más eficiente al hacerlo de esa manera?

No. MaxRAM solo afecta el cálculo del tamaño del almacenamiento dinámico y el recolector de basura predeterminado (cuando no se especifica explícitamente).

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda