Red de conocimiento informático - Problemas con los teléfonos móviles - Análisis de ocupación del proxy RocketMq

Análisis de ocupación del proxy RocketMq

La idea de este análisis surgió de preguntas planteadas por antiguos colegas. El entorno en línea de un ex colega y el registro de Alibaba Cloud Ons muestran que el agente está extremadamente ocupado. La información de la excepción es la siguiente:

Obtenga la información de la excepción, busque el código fuente de acuerdo con la información del mensaje de excepción, el corredor está ocupado, inicie el flujo lo antes posible y ubique la ubicación donde se imprime la información de la excepción. .

Se puede ver que el pageCache del sistema operativo en el lado del agente está ocupado. La persistencia del mensaje rocketMq se escribe primero en el caché de la página y luego el sistema operativo realiza una operación de limpieza del disco. Por lo tanto, cuando el mensaje se escribe en la caché, se produce un error. En resumen, el sistema escribe una excepción de ocupado cuando el agente maneja la persistencia de los mensajes escritos en la caché de la página.

El sistema operativo determina si la página se ha escrito en la lógica ocupada:

Cuando ocurre una excepción en el lado del agente, se le dará el código de error correspondiente al cliente en lugar de lanzando la excepción. Aquí se refiere a una cita. Aquí el corredor le da al cliente el código de respuesta. Error del sistema. Un punto muy importante es que en rocketMq, las excepciones comerciales específicas no se lanzan al cliente, sino que todas se encapsulan y se envían al cliente mediante códigos de error como resultado, excepto las excepciones de comunicación de la red Netty.

Luego observe cómo el cliente maneja el caché de la página proxy:

Puede ver que los errores del sistema devueltos por el cliente al proxy se envuelven en MQBrokerException, se lanzan y finalmente se devuelven. al productor para enviar el mensaje:

Se puede ver que cuando el cliente envía un mensaje, si ocurre una MQBrokerException, cuando se obtiene el código de respuesta = system_error, el mensaje devuelto por el agente continuará. y el mensaje sincrónico se reintentará dos veces, de forma asíncrona. Los mensajes y los mensajes unidireccionales no se reintentan, por lo que en este caso los mensajes se perderán en ambos modos.

Nota:

Cuando PageCache está ocupado cuando el agente está procesando la escritura de mensajes, debido a que está esperando el bloqueo del CommitLog del agente, no se escribe en el caché de la página y no se realiza correctamente. obtenido, por lo que no se escribe nada en el disco.

La solución a este problema es:

El problema es que el broker no puede manejar el envío de mensajes, por lo que puedes separar los mensajes correspondientes al broker actual mejorando el rendimiento del actual. máquina o agregar otra cola de intermediario.