Pregunta

Este artículo ofrece una buena descripción general de Por eso el manejo estructurado de excepciones es malo. ¿Hay alguna forma de obtener la solidez de evitar que el servidor se bloquee y superar los problemas mencionados en el artículo?

Tengo un software de servidor que ejecuta alrededor de 400 usuarios conectados al mismo tiempo. Pero si hay una caída, los 400 usuarios se ven afectados. Agregamos un manejo estructurado de excepciones y disfrutamos de los resultados por un tiempo, pero finalmente tuvimos que eliminarlo debido a algunos bloqueos que causaron que todo el servidor se bloqueara (lo que es peor que solo tenerlo y reiniciarse).

Así que tenemos esto:

  • Con SEH: solo 1 usuario de los 400 tiene un problema para la mayoría de los bloqueos
  • Sin SEH: si algún usuario se bloquea, los 400 afectados se ven afectados.
  • Pero a veces con SEH: el servidor se bloquea, los 400 están afectados y los futuros usuarios que intentan conectarse.
¿Fue útil?

Solución

Divida su programa en procesos de trabajo y en un solo servidor. El proceso del servidor manejará las solicitudes iniciales y luego las entregará a los procesos de trabajo. Si un proceso de trabajo falla, solo los usuarios de ese trabajador se ven afectados. No use SEH para el manejo de excepciones en general, como lo descubrió, puede y lo dejará completamente abierto a los interbloqueos, y todavía puede bloquearse de todos modos.

Otros consejos

Usar SEH porque tu programa falla aleatoriamente es una mala idea. No es polvo mágico de pixie lo que puedes rociar en tu programa para que deje de estrellarse. Rastrear y corregir los errores que causan los bloqueos es la solución correcta.

Usar SEH cuando realmente necesitas manejar una excepción estructurada está bien. Larry Osterman hizo una publicación de seguimiento explicando qué situaciones requieren SEH: archivos mapeados en memoria, RPC y transiciones de límites de seguridad .

¿Corrige los errores en tu programa? ;)

Personalmente mantendría a los manejadores de SEH, les pido que descarguen una pila de llamadas de dónde ocurrió la infracción de acceso o lo que sea que haya ocurrido y solucionen los problemas. El problema de "a veces el servidor se bloquea" probablemente se deba a puntos muertos causados ??por el subproceso que tenía la excepción SEH manteniendo algo bloqueado y, por lo tanto, es poco probable que esté relacionado con el hecho de que está utilizando la propia SEH.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top