2011-02-10 261 views
8

Say, "myApp.jar con la CPU = 800 y la memoria de gestión = 1024"Limitar el uso de memoria y CPU de aplicación Java

he estado haciendo de programación Java durante muchos años y es un embarrasment para hacer esta pregunta. Ni siquiera sé si esto es posible o no. Y si es así, ¿cómo?

Lo que quiero saber es si es posible establecer la memoria máxima de un programa java y el uso de la CPU. De repente pensé en esto porque recientemente comencé a desarrollar aplicaciones móviles. Quiero saber cómo se comportará la aplicación en el dispositivo que tiene memoria y procesador muy limitados.

Vi los motores de física con aplicaciones de demostración que se ejecutan en el navegador o que puedo ejecutar en mi PC. ¿Qué sucede si los ejecuto en un dispositivo móvil? ¿El rendimiento será el mismo? En lugar de desarrollar una aplicación móvil de muestra para probar el rendimiento de la biblioteca, preferiría ejecutarla primero con una CPU y memoria específica usando mi PC.

Intenté googlear por cierto ... todo lo que encontré fue la monitorización y la optimización del rendimiento. Puedo estar usando palabras clave incorrectas.

Respuesta

8

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

+0

Gracias bestsss. Voy a intentarlo. – demotics2002

+2

En Linux, puede ejecutar la JVM con la afinidad especificada de la CPU utilizando 'taskset (1)', lo cual es bastante obvio para muchas personas. No hay forma de establecer la afinidad de la CPU desde una JVM corriente. (Puedes hacer magia JNI, pero serán dragones). – andersoj

+0

Sí, no se puede establecer ni la afinidad ni la prioridad del procesador por las opciones java estándar que conozco ... en Windows el comando que necesitas es iniciar (en las ventanas de 32 bits no funciona) 't tiene opción de afinidad, sin embargo) – bestsss

1

En este caso, puede ser útil ejecutar la aplicación en un emulador móvil (por ejemplo, Android).

Con esto puede emular un dispositivo móvil con CPU/Memoria específica. Por lo tanto, debe obtener el rendimiento que es comparable a un dispositivo que tiene una CPU más lenta y menor RAM.

Android/emulador de Nokia son gratuitos y están disponibles para su descarga desde las secciones de desarrollador de los sitios de Nokia/Google.

0

https://github.com/haosdent/jcgroup jcgroup es su mejor opción. Puede usar esta biblioteca para limitar los recursos compartidos de la CPU, la velocidad de E/S del disco, el ancho de banda de la red, etc.

1

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

JVM tiene control sobre el uso de la memoria máxima/mínima.

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

Cuestiones relacionadas