私たちは、アプリケーションで多くのカスタムWindowsサービスを使用します。しかし、私が現在取り組んでいるのは厄介な問題です。サービスは稼動し続けているだけで、機能は停止します。Windowsサービスの内部障害を特定する方法
サービスの主な方法は、このように、try/catchブロック内にラップされています
static void Main()
{
IRepository rep = new Repository();
ILogger log = LogManager.GetLogger(GetType().Name);
TimeSpan loadWindowStart = new TimeSpan(9, 0, 0);
TimeSpan loadWindowEnd = new TimeSpan(18, 0, 0);
foreach (SuppressionLoad sl in rep.GetSuppressionLoads().ToList())
{
try
{
// do stuff
}
catch(Exception ex)
{
// log error
}
}
}
それはものがそうであるようにサービスも記録し、我々はそれが忙しいながら、ログがいっぱいに見ることができます。
ただし、ログが停止することがあります。データベースの他の場所での活動は、サービス全体が機能しなくなったことを示しています。サーバー上のサービスをチェックインすると、サービスには「開始済み」のステータスが表示されます。これは、通常はかなりプロセッサを使用していますが、この状態になっている間はほとんどゼロのシステムリソースを占有します。もしあなたがそれを試して止めれば、試しにタイムアウトするだけで、私たちが知る限り、それは決して決して止まることはありません。タスクマネージャでプロセスを強制終了する必要があります。
ログには、これらのストールまでの実行中に不都合なことはありません。イベントビューアには何も見つかりません。
エラーをログに記録しないため、ここで何が起こっているのか、ここからフォールトを診断して診断するためにできることについては迷っています。それは非常に断続的です。状態に入る前に何日も問題なく実行されることがよくあります。何が起こっているのかを調べるために私たちは何ができますか?
サービスのコードを見て、デバッガを使用してコードをステップ実行する必要があるように聞こえます。おそらく、ログの記録方法を変更することを検討することをおすすめします。ログファイルまたは毎回新しいログファイルを作成します。 – MethodMan
@MethodManステッピングスルーは問題ありませんが、この失敗は非常に断続的なので実際的な選択肢ではありません。 –
私はそれ以外の場合を除いてはお勧めできません。おそらくあなたはリソースを作成していて、正しく処分していないのですが、例外メッセージの何時にトラップしていますか? – MethodMan