18

1分ごとに集中的な作業を行うWindowsサービスがあります(実際には、httpを介して異なるシステムと同期するたびに新しいスレッドを開始しています)。問題は、数日後にエラー メッセージが表示されずに突然停止することです。

私は NLog を設置しており、 に登録していAppDomain.CurrentDomain.UnhandledExceptionます。textfile-log の最後のエントリは、問題のない通常のエントリです。EventLog を調べても、アプリケーション ログにはメッセージが見つかりませんが、システム ログには 2 つのエントリがあります。

基本的に、サービスが予期せず終了したと言う人もいます。これ以上何もない。2 番目のイベント (最初のイベントと同時に) は、「...スタックの新しい保護ページを作成できません...」と述べています。

私が読んだことから、これはおそらくスタックオーバーフロー例外です。私は XML を解析しておらず、再帰的な作業も行っていません。Gate、Nancy、SignalR を使用して Web サーバーをホストし、組み込みモードで RavenDB を実行しています。毎分、.NET 4.0 の Taskfactory を使用して新しいタスクが開始されます。また、ContinueWith もありSystem.Timers.Timer、1 分後に再起動するために a を再起動します。

この問題の調査を開始するにはどうすればよいですか? そのようなエラーの考えられる理由は何ですか?

4

5 に答える 5

18

あなたが提供した情報に基づいて、私は少なくとも、少なくとも、次のことを行います。

  1. サード パーティの呼び出しには特に注意を払い、それらのポイントに関する追加の情報ログを追加します。
  2. AppDomain.CurrentDomain.UnhandledExceptionあなたを助けない状況がいくつかあります -StackOverflowExceptionそれらの1つです。この場合、CLR はスタック トレースの代わりに単に文字列を返すだけだと思います。
  3. 複数のスレッドが導入されている領域には特に注意してください。

見過ごされがちな例StackOverflowExceptionは次のとおりです。

private string myString;
public string MyString { get { return MyString; } }  //should be myString
于 2012-06-27T00:29:56.833 に答える
3

これを特定のコンピューターで取得し、イニシャライザー内から自分自身を参照する ac# オブジェクトまでトレースしました

于 2018-03-06T08:41:47.027 に答える
2

「価値がある」のと同じように-私の場合、コードがWindowsイベントログに書き込もうとしていて、対話型ユーザーに十分な権限がなかったときに、このエラーが報告されました。これは、例外をテキスト ファイルとイベント ログ (必要な場合) に記録する小さなコンソール アプリでした。例外的に、テキスト ファイルが更新されていましたが、このエラーがスローされ、エラー処理によってキャッチされませんでした。イベント ログを無効にすると、エラーの発生が停止しました。

于 2014-08-08T10:42:05.077 に答える
1

他の人が同じ問題を抱えている場合に備えて、私の場合、Windows サービスが偶然に無限の再帰ループに陥っていることに気付きました。したがって、他の誰かがこの問題を抱えている場合は、巨大な再帰ループを引き起こしている可能性のあるメソッド呼び出しを考慮してください。

于 2015-11-04T06:59:23.813 に答える