Frage

Dieser Artikel einen guten Überblick gibt auf warum strukturierte Ausnahmebehandlung ist schlecht. Gibt es einen Weg, um die Robustheit des Anhaltens der Server abstürzt zu bekommen, während immer vorbei an den Problemen in dem Artikel erwähnt?

Ich habe eine Server-Software, die gleichzeitig über 400 angeschlossene Benutzer ausgeführt wird. Aber wenn es ein Absturz ist alle 400 Benutzer sind betroffen. Wir haben strukturierte Ausnahmebehandlung und genossen die Ergebnisse für eine Weile, aber schließlich hatten es zu entfernen, weil einige Abstürze der gesamte Server verursacht zu hängen (was noch schlimmer ist, als nur mit ihm abstürzen und neu starten, selbst).

Wir haben also diese:

  • Mit SEH: Nur 1 Benutzer der 400 bekommt ein Problem für die meisten Abstürze
  • Ohne SEH:. Wenn ein Benutzer einen Absturz bekommt, werden alle 400 betroffen
  • Aber manchmal mit SEH. Server hängt, alle 400 sind betroffen und zukünftigen Benutzer, die versuchen, eine Verbindung
War es hilfreich?

Lösung

Break Ihr Programm bis in die Arbeitsprozesse und einem einzigen Server-Prozess. Der Server-Prozess wird Erstanträge behandeln und dann die die Arbeitsprozesse Hand ab. Wenn ein Arbeitsprozess stürzt, nur die Benutzer auf dem Arbeitnehmer betroffen sind. Sie SEH nicht für die allgemeine Exception Handling -., Wie Sie herausgefunden haben, kann und wird Sie breit zu Deadlocks offen, und man kann trotzdem noch abstürzen

Andere Tipps

Mit SEH, weil Ihr Programm zufällig abstürzt ist eine schlechte Idee. Es ist keine Magie Feenstaub, die Sie auf Ihrem Programm streuen können, um es Absturz zu stoppen. Aufspüren und zur Festsetzung der Fehler, die die Abstürze ist die richtige Lösung führen.

Mit SEH, wenn Sie wirklich eine strukturierte Ausnahme ist in Ordnung müssen zu handhaben. Larry Osterman einen Followup Beitrag zu erklären welche Situationen SEH benötigen: Memory-Mapped-Dateien, RPC, und Sicherheitsgrenze Übergänge

.

Fix die Fehler in Ihrem Programm? ;)

Persönlich würde ich die SEH-Handler halten und sie daran haben einen Anruf Stapel auskippen, wo die Zugriffsverletzung oder was auch immer passiert ist, und die Probleme zu beheben. Das ‚Manchmal ist der Server hängt‘ Problem ist wahrscheinlich auf Deadlocks durch den Thread verursacht, die SEH Ausnahme hatte etwas verschlossen zu halten und so unwahrscheinlich ist auf die Tatsache zurückzuführen sein, dass Sie SEH verwenden selbst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top