Estoy realizando algunas pruebas de rendimiento. Mi solicitud tiene quegenerar carga de CPU en Java
- lectura desde JMS
- hacer algún procesamiento
- escritura a JMS
Mi objetivo aquí es para simular # 2, 'algún tipo de procesamiento'. Es decir, introduzca un retraso y ocupe la CPU durante un tiempo determinado (por ejemplo, 500 ms) antes de reenviar el evento.
El enfoque ingenuo sería Thread.sleep(500)
. Esto introduciría el retraso correcto en la ejecución, pero no ejercitaría la CPU.
Cálculo de números de Fibonacci es una opción. ¿Alguien ha utilizado alguna técnica interesante solo para mantener las CPU ocupadas durante un tiempo determinado?
características ideales serían:
- realiza una serie de instrucciones, en lugar de (por ejemplo) simplemente girando sobre un bucle
- No es algo que el HotSpot VM va a optimizar hasta desaparecer
- Tiene una manera fácil de ajustar el período de procesamiento hacia arriba o hacia abajo (el tiempo para completar variará claramente dado el hardware)
Puede explicar mejor por qué la utilización de la CPU es necesaria, sino que simplemente dormir con rosca.dormir() no es adecuado? –
No estoy seguro de entender lo que quiere decir con "ejercitar la CPU" y por qué exactamente tendría que hacer eso. ¿Podrías por favor elaborar un poco más? ¿Qué estás exactamente probando aquí? Por lo que puedo ver es el "algo de procesamiento", el JMS de lectura/escritura o algo que envía datos a esta cosa. Gracias. –
> sleep no es adecuado Necesito que las operaciones JMS sucedan en condiciones de CPU realistas. Una CPU inactiva podría darme un rendimiento JMS falsamente alto; Necesito que la CPU esté 'realísticamente' ocupada, por lo que mi medición JMS es buena. – Air