Saltar al contenido

Limitación de la memoria y el uso de la CPU de la aplicación Java

Nuestros mejores programadores agotaron sus reservas de café, por su búsqueda noche y día por la solución, hasta que Asia halló el resultado en GitLab así que en este momento la comparte aquí.

Solución:

puede limitar el uso de la memoria mediante la opción -Xmx y puede limitar el uso de la CPU configurando la prioridad del proceso y/o la afinidad de la CPU.

La JVM no tiene control sobre el uso de la CPU ni sobre la prioridad.

JVM tiene control sobre el uso máximo/mínimo de memoria.

Hay una solución. Es posible ejecutar cada JVM en un separado [Docker container][1]. Y controle la asignación de recursos (memoria, CPU, red, IO) para cada contenedor. Ese es exactamente el valor añadido de los contenedores Docker.

[1]: La JVM no tiene control sobre el uso de la CPU ni sobre la prioridad. Sin embargo, puede ejecutar cada JVM en un contenedor Docker separado. Y controle la asignación de recursos para cada contenedor. Ese es exactamente el valor añadido de los contenedores Docker.

Docker ofrece opciones de administración de recursos para limitar el acceso a la CPU para ejecutar contenedores docker. Eche un vistazo a las opciones del programador CFS disponibles con docker run de Limitar los recursos de un contenedor en la documentación de Docker, como:

  • --cpus= – Especifique la cantidad de recursos de CPU disponibles que puede usar un contenedor. Por ejemplo, si la máquina host tiene dos CPU y configura --cpus="1.5", el contenedor está garantizado como máximo una y media de las CPU. Esto es el equivalente a establecer --cpu-period="100000" y --cpu-quota="150000". Disponible en Docker 1.13 y superior.
  • --cpuset-cpus – Limite las CPU o núcleos específicos que puede usar un contenedor. Una lista separada por comas o un rango separado por guiones de CPU que puede usar un contenedor, si tiene más de una CPU. La primera CPU tiene el número 0. Un valor válido podría ser 0-3 (para usar la primera, segunda, tercera y cuarta CPU) o 1,3 (para usar la segunda y cuarta CPU).

Estas opciones también están disponibles a través de docker-compose, al implementar un enjambre/pila de Docker, como se menciona en la referencia de la versión 3 del archivo Compose en resources:

version: '3'
services:
  redis:
    image: redis:alpine
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 50M
        reservations:
          cpus: '0.25'
          memory: 20M```

Nota: que las opciones de recursos heredados en docker compose v2 ahora están limitadas a pilas en la migración a v3.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *