2012-04-23 17 views
5

En Java está el método Runtime.getRuntime().availableProcessors() que tiene la siguiente Javadoc:Java: ¿Núcleos disponibles para la JVM?

devuelve el número de procesadores disponibles para la máquina virtual de Java. Este valor puede cambiar durante una invocación particular de la máquina virtual.

¿Cómo puede cambiar realmente el valor? ¿En qué circunstancias habría menos procesadores disponibles para la JVM que físicamente instalados, por ejemplo?

Jonas

+0

Aquí hay un [subproceso SO relacionado] (http://stackoverflow.com/questions/10133570/procesos disponibles- devuelve-1-para-teléfonosdong). – rrufai

Respuesta

10

El comando de Linux taskset(1) se puede utilizar para obligar a los procesos a utilizar una CPU específica o conjuntos específicos de CPU; es bastante fácil modificar un programa en ejecución para forzarlo a uno o más procesadores. Por ejemplo,

taskset -p `pidof java` --cpu-list 0,5,7,9-11 
5

En Windows que es posible cambiar el número de núcleos se permite que una aplicación utilice a través de algunas propiedades simples. En entornos virtualizados también puede restringir los núcleos a la máquina virtual para que solo vea los núcleos que la máquina virtual ve. Y en Linux/Unix puede establecer la afinidad central para que las aplicaciones o los usuarios no puedan usar todos los núcleos, por lo que es posible que tenga más núcleos instalados de los que son visibles para la JVM.

Nota: esto es útil para máquinas que ejecutan trabajos múltiples en las que no desea una alta contención de recursos y desea aprovisionar insuficientemente (o incluso sobreprovisionar) recursos.

1

Puede personalizar los recursos disponibles para las aplicaciones java con opciones en el comando java. De hecho, no sé el nombre exacto de los interruptores, pero puedes personalizar un montón de cosas.

¿Por qué darías menos procesadores a una instancia de la JVM? ¡Depende! tal vez esté organizando tomcat y quiera distribuir recursos disponibles para sus clientes.

Espero que esto ayude.

2

En algunos hardware (servidores), es posible enrutar procesadores sin necesidad de reiniciar el sistema. Esto puede ocasionar que la cantidad de procesadores cambie. Aunque una causa más común es cuando el sysadmin cambió la política de programación del procesador.