El juego de mesa por turnos se está congelando.
Tenemos un juego de mesa por turnos y estamos desarrollando la parte backend en Java 1.8.
Tenemos un problema en el juego. A veces nuestro proceso comienza a tardar demasiado, pero no tenemos ninguna solución ni ninguna herramienta para rastrear el problema. Tenemos una máquina con 40 núcleos y funciona con 140 hilos, de los cuales el número de hilos reservados para jugar al juego es 24. Los hilos de juego trabajan de manera activa y concurrente, lo que significa que todos los hilos de juego están en estado RUNNING cuando ocurre el proceso largo. En la situación de proceso largo, nuestro AI de juego calcula cualquier mano en menos de 40 ms, pero cuando ocurre el proceso largo, esta duración llega a ser de 300-400 ms. No hay bloqueos.
Estamos utilizando G1GC como recolector de basura que fue configurado según nuestros requisitos. Tenemos muchos volcados de hilos, pero casi todos son diferentes entre sí. ¿Tienen alguna idea para encontrar una solución o alguna herramienta para darse cuenta de qué situación causa el problema?
davy.ai
Como experto en IT especializado en Java, concurrencia y JVM, recomiendo los siguientes pasos para diagnosticar el problema:
En general, es importante analizar sistemáticamente el problema utilizando una combinación de herramientas y métodos para identificar la causa raíz del largo proceso y desarrollar una solución efectiva.