tutorial monitoreo aplicaciones java linux memory operating-system jvm

java - monitoreo - visualvm profiler



¿Limitaciones prácticas de la memoria JVM y el uso de la CPU? (2)

Digamos que el dinero no era un factor limitante, y quería escribir un programa Java que se ejecutara en una sola máquina poderosa.

El objetivo sería hacer que el programa Java se ejecute lo más rápido posible sin tener que intercambiar o ir al disco por nada.

Digamos que esta computadora tiene:

  • 1 TB de RAM (64 DIMM de 16 GB)
  • 64 núcleos de procesador (8 procesadores de 8 núcleos)
  • corriendo Ubuntu de 64 bits

¿Podría una sola instancia de un programa Java que se ejecuta en una JVM aprovechar esta cantidad de RAM y procesadores?

¿Hay alguna consideración práctica que pueda limitar el uso y la eficiencia?

  • ¿Limitaciones del proceso del sistema operativo (memoria y subprocesos)?
  • ¿Limitaciones de JVM memoria / montón?
  • Limitaciones de subprocesos JVM?

Gracias, Galen


En primer lugar, el programa Java en sí: un código mal diseñado no usaría tanta potencia informática. Los hilos mal implementados, por ejemplo, podrían hacer que tu rendimiento sea lento.

El sistema operativo también es un factor limitante: no todos los SO pueden manejar bien esa cantidad de memoria.

Creo que la JVM puede manejar esa cantidad de memoria, ya que el sistema operativo la admite.


Una sola instancia puede intentar acceder a toda la memoria, sin embargo, las regiones NUMA significan que cosas como GC tienen un mal acceso a la memoria en otra región. Esto se está volviendo más rápido y JVM tiene cierta compatibilidad con NUMA, pero debe mejorar si desea la escalabilidad. Aun así, puede obtener 256 MB de almacenamiento dinámico y usar 700 de memoria nativa / directa sin este problema. ;)

La mayor limitación si tiene mucha memoria es que las matrices, colecciones y ByteBuffer (para los archivos mapeados en memoria) están todos limitados a un tamaño de 2 mil millones. (2 ^ 31-1)

Puede solucionar estos problemas con colecciones personalizadas, pero es realmente algo que Java debería soportar en mi humilde opinión.

Por cierto: puedes comprar un Dell R910 con 1 TB de memoria y 24 núcleos / 48 hilos con Ubuntu por £ 40K.

Por cierto: solo tengo experiencia en JVM de hasta 40 GB de tamaño.