Comparteix a través de


Diagnóstico de errores comunes de los paquetes de código con Service Fabric

En este artículo se describe lo que conlleva que un paquete de código finalice de forma inesperada. Además, se proporciona información sobre las posibles causas de los códigos de error comunes, junto con pasos para solucionar los problemas.

¿Cuándo finaliza inesperadamente un proceso o contenedor?

Cuando Azure Service Fabric recibe una solicitud para iniciar un paquete de código, empieza a preparar el entorno en el sistema local en función de las opciones establecidas en los manifiestos de aplicación y de servicio. Estas tareas de preparación pueden incluir la reserva de recursos o puntos de conexión de red, la configuración de reglas de firewall o la configuración de restricciones de regulación de recursos.

Una vez que el entorno se haya configurado correctamente, Service Fabric intentará abrir el paquete de código. Este paso se considera exitoso si el sistema operativo o el tiempo de ejecución del contenedor notifica que el proceso o contenedor se activó correctamente. Si la activación no se realiza correctamente, debería ver un mensaje de mantenimiento en SFX parecido al siguiente:

There was an error during CodePackage activation. Service host failed to activate. Error: 0xXXXXXXXX

Una vez que se haya activado correctamente el paquete de código, Service Fabric empezará a supervisar su vigencia. Llegado a este punto, un proceso o contenedor puede finalizar en cualquier momento por varias razones. Por ejemplo, tal vez no pudo inicializar un archivo DLL o el sistema operativo se quedó sin espacio en el montón del escritorio. Si el paquete de código finalizó, debería ver el siguiente mensaje de mantenimiento en SFX:

The process/container terminated with exit code: XXXXXXXX. Please look at your application logs/dump or debug your code package for more details. For information about common termination errors, please visit https://aka.ms/service-fabric-termination-errors

El código de salida de este mensaje de mantenimiento es la única pista que proporciona el proceso o el contenedor sobre el motivo por el que finalizó. Puede haberlo generado cualquier nivel de la pila. Por ejemplo, este código de salida podría estar relacionado con un error del sistema operativo o con un problema de .NET, o bien podría haberlo generado el código. Use este artículo como punto de partida para diagnosticar el origen de los códigos de salida de finalización y las posibles soluciones. Aun así, tenga en cuenta que son soluciones generales para escenarios comunes y quizás no se aplican a los errores que está experimentando.

¿Cómo puedo saber si Service Fabric finalizó mi paquete de código?

Service Fabric puede ser responsable de finalizar su paquete de código por una variedad de motivos. Por ejemplo, puede decidir colocar el paquete de código en otro nodo para fines de equilibrio de carga. Puede comprobar si Service Fabric finalizó su paquete de código si ve cualquiera de los códigos de salida de la tabla siguiente.

Nota

Si el proceso o contenedor finaliza con un código de salida distinto de los que se muestran en la tabla siguiente, Service Fabric no es responsable de su finalización.

Código de salida Descripción
7147 Indica que Service Fabric cerró correctamente el proceso o contenedor al enviar una señal CTRL+C.
7148 Indica que Service Fabric finalizó el proceso o contenedor. En ocasiones, este código de error puede indicar que el proceso o contenedor no respondió de forma oportuna después de enviar una señal CTRL+C, por lo que hubo que finalizarlo.

Otros códigos de error comunes y sus posibles correcciones

Código de salida Valor hexadecimal Descripción breve Causa principal Corrección posible
3221225794 0xc0000142 STATUS_DLL_INIT_FAILED Este error en ocasiones significa que el equipo se quedó sin espacio en el montón del escritorio. Esta causa es especialmente probable si tiene numerosos procesos que pertenecen a la aplicación en ejecución en el nodo. Si el programa no se creó para responder a las señales CTRL+C, puede habilitar el valor EnableActivateNoWindow en el manifiesto del clúster. Al habilitar esta configuración, el paquete de código se ejecutará sin una ventana de GUI y no recibirá las señales CTRL+C. Esta acción también reduce la cantidad de espacio en el montón del escritorio que consume cada proceso. Si el paquete de código tiene que recibir señales CTRL+C, puede aumentar el tamaño del montón del escritorio del nodo.
3762504530 0xe0434352 N/D Este valor representa el código de error para una excepción no controlada desde código administrado (es decir, .NET). Este código de salida indica que la aplicación lanzó una excepción que todavía no se ha controlado y que finalizó el proceso. Como primer paso para determinar qué ha desencadenado este error, depure los registros y los archivos de volcado de la aplicación.

Pasos siguientes