我們在我們的應用程序中使用了大量的自定義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