共用方式為


針對應用程式進行疑難排解

AppFabric 提供管理 IIS 主控之 .NET Framework 4 WCF 與 WF 服務的功能。 這些功能包括可用於主控長期工作流程服務的可靠性機制、簡化的應用程式設定程序,以及可用於監控 .NET Framework 4 WCF 與 WF 服務之健康情況的工具。 本節說明如何使用監控工具對服務進行疑難排解。

使用「儀表板」開始對 WCF 與 WF 服務進行疑難排解。 在「IIS 管理員」中,按一下 [AppFabric] 群組中的 [儀表板] 圖示,以顯示 [儀表板] 頁面。 這個複合式頁面提供部署在 IIS 之特定範圍的應用程式的健康情況摘要檢視,也提供可讓您向下切入以檢視詳細疑難排解資訊的連結。 若儀表板與其相關頁面所顯示的衡量標準未提供足以讓您解決問題的深入資訊,您可以使用 AppFabric 工具來啟用 System.Diagnostics 追蹤功能,以疑難排解 WCF 或 WF 應用程式。

使用儀表板進行疑難排解

對分散式應用程式而言,隔離問題並不像是檢視單一計數器或只使用一個工具進行隔離那麼簡單。 相反地,解決分散式服務環境中的問題常常需要從不同的工具或計數器取得相關聯的資料,以建立問題實際原因的真實全貌。 [儀表板] 包含三個 Widget,[持續性 WF 執行個體]、[WCF 呼叫歷程記錄] 與 [WF 執行個體歷程記錄],您可以使用它們來關聯資訊以針對您的應用程式進行疑難排解。 其中的後兩者是歷程記錄衡量標準,表示所顯示的內容受到儀表板頂端 [時間間隔] 時間選擇器 ([過去 1 分鐘]、[過去 24 小時] 等) 的影響。

第一次開啟或檢視這三個 Widget 的其中之一時,您會看到其衡量標準狀態的高階摘要檢視。 您可以在此階段快速判斷是否發生問題。 例如,[持續性 WF 執行個體] Widget 一開始會顯示已將狀態儲存在持續性儲存區之即時長期工作流程執行個體的狀態。 它會提供狀態為「作用中」、「閒置」與「已暫停」之持續性執行個體數目的摘要狀態。 它可以快速通知您持續性工作流程等級是否有問題。 您可以按一下摘要頁面上的連結,以取得關於特定摘要計數器的額外資訊。

使用持續性 WF 執行個體衡量標準

[持續性 WF 執行個體] Widget 會顯示已將狀態儲存在持續性儲存區之即時工作流程執行個體的狀態。 它會顯示狀態為「作用中」、「閒置」與「已暫停」之持續性執行個體的數目。 每個標題 (與摘要計數本身) 都是一個連結,按一下此連結即可顯示 [持續性 WF 執行個體] 頁面 (其中包含原始資料)。

針對已暫停的執行個體進行疑難排解時,若要更深入了解問題,請按一下 [儀表板] 上的 [已暫停的執行個體]。 [持續性 WF 執行個體] 頁面會顯示所有已暫停的執行個體。 選取其中一個執行個體之後,系統會在畫面底部的 [詳細資料] 窗格中填入已暫停之執行個體的摘要資訊。 [錯誤] 索引標籤會顯示執行個體暫停的原因。 如果需要額外資訊,您可以在執行個體上按一下滑鼠右鍵,然後選取 [檢視追蹤的事件] 選項。 此動作會顯示 [追蹤的事件] 頁面,其中會顯示已暫停之工作流程執行個體的所有追蹤事件。 預設會將最新的事件放在頂端。

使用 WCF 呼叫歷程記錄衡量標準

[WCF 呼叫歷程記錄] Widget 會顯示已接收並記錄在監控儲存區的 WCF 呼叫數目。 標題會顯示已完成或發生例外狀況的呼叫摘要計數,或達到節流閾值的次數。 第一個欄位會顯示具有最多已完成呼叫次數的前五個服務。 第二個欄位會顯示依錯誤類型分組的 WCF 錯誤細分。 第三個欄位會顯示具有最多服務例外狀況的前五個服務。 每個衡量標準都連結到 [追蹤的事件] 頁面,您可以在其中看到在 [儀表板] 上摘要顯示的原始資料。

例如,若要取得有關失敗之呼叫的詳細資訊,請按一下 [呼叫失敗] 摘要計數器,並移至 [追蹤的事件] 頁面。 此頁面會填入 IIS 階層之選取範圍中最近失敗的 WCF 呼叫。 選取這些事件其中之一會在畫面底部的 [詳細資料] 窗格中填入內容。 [錯誤] 索引標籤包含關於失敗的例外狀況資訊。 若需要有關失敗之呼叫的詳細資訊,您可以在事件上按一下滑鼠右鍵,然後選取 [檢視所有相關事件] 選項。 這樣會重新整理 [追蹤的事件] 頁面,並以與第一個事件相關的所有事件填入。

注意

若要使用 [檢視所有相關事件] 選項,應用程式的監控等級必須設定為 [端對端監控] 以上。 這個等級會指示監控基礎結構收集將端對端活動識別碼 (E2EActivityId) 與另一個端對端活動識別碼關聯的傳送事件。

使用 WF 執行個體歷程記錄衡量標準

[WF 執行個體歷程記錄] Widget 會顯示已啟用、失敗與已完成的工作流程執行個體數目。 第一個欄位會顯示具有最多啟用項的前五個服務。 第二個欄位會顯示具有最多失敗之執行個體的前五個服務。 第三個欄位會顯示已復原的失敗執行個體數目。 例如,如果工作流程執行個體遇到導致它暫停的錯誤,而且稍後已經繼續且成功地完成,您會發現 [失敗] 欄位與 [已復原] 欄位的計數增加 1。

使用 [WF 執行個體歷程記錄] Widget 的資訊進行疑難排解,與使用 [持續性 WF 執行個體] Widget 進行疑難排解的方式類似。 按一下其中一個標題以顯示 [追蹤的 WF 執行個體] 頁面,然後檢視有關工作流程執行個體的摘要資訊。 但是,因為 [WF 執行個體歷程記錄] Widget 顯示的工作流程執行個體可能已完成,您不會看到在 [持續性 WF 執行個體] 頁面上看到的執行個體控制動作。 在 [追蹤的 WF 執行個體] 頁面上,您可以在執行個體上按一下滑鼠右鍵並檢視其追蹤事件,以查看該執行個體的詳細追蹤資料。

使用 System.Diagnostics 追蹤進行疑難排解

AppFabric 利用 .NET Framework 4 (會產生事件到「Windows 事件追蹤」(ETW) 子系統) 中 WCF 追蹤及 WF 追蹤的增強功能。 ETW 提供快速的事件追蹤基礎結構。 但是,在某些案例中,您需要查看所有可用的診斷資訊。 在 AppFabric 中,您可以在應用程式或網站等級啟用 System.Diagnostics 追蹤。 此追蹤資訊會寫到磁碟上的檔案,而且您可以使用「服務追蹤檢視器」工具來檢視這些資訊。

警告

System.Diagnostics 追蹤會降低應用程式的效能,且會產生較大的追蹤檔案。 只有要針對應用程式進行疑難排解時,才應該啟用 System.Diagnostics 追蹤。

疑難排解含分散式 ASP.NET 應用程式

您可以使用活動 ID (如之前的使用 WCF 呼叫歷程記錄衡量標準一節所述) 查閱長期執行個體 ID,並協助疑難排解跨多部 AppFabric 伺服器電腦與 WCF 服務通訊的 ASP.NET 應用程式。 若要完成此工作,監控等級必須至少設定為「端對端監控」以設定活動追蹤。讓我們藉由其中一個範例來瞭解這種情況。 

使用 ASP 與 IIS 監控工具監控 Web 應用程式時,系統管理員注意到在與服務通訊時,ASP.NET 應用程式的逾時錯誤增加。檢查錯誤後,系統管理員取得在發生錯誤時為主動的活動 ID。透過 AppFabric 儀表板,系統管理員建立與執行該相同活動 ID 的查詢。傳回一個事件,接收服務 X 的執行個體 Y 的事件。他檢視與該事件關聯的訊息流程,並注意到「超過節流最大同時呼叫數目」事件。查看服務摘要頁時,系統管理員注意到 「WCF 節流叫用項」設定為 20。他也看到之前 24 小時的呼叫,在之前的 30 分鐘突然增加。 他檢視其他天數,注意到每一天同一時間的同一個事項。他推測每天在那些時段的負載增加,而且最大同時呼叫數目節流設定應增加到 25 個。仔細觀察後,系統管理員注意到節流事件的發生率大幅減少,跟在呼叫 WCF 服務時,ASP.NET 應用程式的逾時錯誤發生率相同。

SQL Server Agent Windows 服務工作

SQL Server Agent Windows 服務會監控 SQL Server 操作、自動化特定的管理工作、在需要時產生警示,以及排程和執行工作。 SQL Server 工作是 SQL Server Agent 依序執行的一系列指定操作,其中涵蓋各種資料庫相關工作。 當 AppFabric 設定為使用 SQL Server 時,它會使用 SQL Server Agent 將事件匯入到監控資料儲存區,並定期從儲存區清除舊資料。

若 SQL Server Agent 不在執行狀態,則已排程的 AppFabric 工作無法在安裝 SQL Server 的電腦上執行。以下列出可確保能使用 SQL Server Agent 服務依排程執行這些工作的步驟:

  1. 檢查 SQL Server Agent Windows 服務的狀態,確定該服務正在執行。 按一下 [系統管理工具],選取 [服務],然後選取 [SQL Server Agent (MSSQLSVR)],並確定 [狀態] 目前是顯示為 [已啟動]。 如果不是,請啟動該服務。

  2. 初始化儲存區時,會建立四個 SQL Server 工作:

    • Microsoft_ApplicationServer_Monitoring_AutoPurge_<監控資料庫名稱>

    • Microsoft_ApplicationServer_Monitoring_ImportWfEvents_<監控資料庫名稱>

    • Microsoft_ApplicationServer_Monitoring_ImportWcfEvents_<監控資料庫名稱>

    • Microsoft_ApplicationServer_Monitoring_ImportTransferEvents_<監控資料庫名稱>

    若 SQL Server Agent Windows 服務已啟動,但 AppFabric 工作未執行,請檢查最後一次執行工作時遇到的錯誤。

  3. 若工作執行個體成功地完成,但事件資料表中沒有事件,請查看監控資料儲存區下的 ASFailedStagingTable 資料表。這個資料表包含特定的資料行 (例如,ErrorNumberErrorMessage),可協助您找出失敗的原因。如果沒有發生錯誤,則此資料表會是空的。

執行 AppFabric SQL Server Agent 工作所使用的 Windows 身分識別 (擁有者) 不應該是該已登入的使用者。 您應該使用預先設定之 AS_MonitoringDbJobsAdmin Windows 安全性帳戶中的身分識別來執行那些工作。 此帳戶最好是網域帳戶。在安裝之後執行 Initialize-ASMonitoringDatabase Cmdlet 時,系統會將監控儲存區的適當權限授與此帳戶。

以下是 SQL Server Agent 處理已送出 AppFabric Server 工作之不同擁有者的方法:

  • 若 SQL Server Agent 工作的擁有者是網域帳戶,則 SQL Server 會連絡網域控制站以檢查帳戶是否有效。 如果有效,工作會在該網域帳戶下執行。否則,會嘗試在本機帳戶下執行。

  • 若 SQL Server Agent 工作的擁有者是本機 sysadmin 帳戶,則 SQL Server Agent 會正確地接受工作步驟上的“RunAs”身分識別,並發出「以 AS_MonitoringDbJobsAdmin 執行使用者」命令。 這表示工作會在 AS_MonitoringDbJobsAdmin 帳戶的身分識別下執行。

    注意

    若要在 SQL Server Management Studio 中檢視工作的“RunAs”身分識別,請在工作上按一下滑鼠右鍵,按一下 [內容],然後按一下 [進階] 索引標籤。 您應該將這個值設定為 AS_MonitoringDbJobsAdmin 帳戶。

  • 若 SQL Server Agent 工作的擁有者是本機帳戶但不是 sysadmin,在工作步驟上提供的“RunAs”身分識別就會被忽略。  在這個案例中,SQL Server Agent 服務會以本機擁有者的身分執行工作。

  • 在與網域控制站中斷連線的案例中 (例如膝上型電腦),若用於執行 SQL Server 監控工作的身分識別是網域使用者,則 SQL Server Agent 會嘗試連絡網域控制站來驗證帳戶。若執行 SQL Server Agent 工作的電腦中斷與網域的連線,此程序會失敗。若要避免此失敗情況,有兩個選項可用:

    1. 兩個選項的第一個,也是最簡單的,就是使用本機使用者帳戶來設定工作 (亦即,執行 Initialize-ASMonitoringDatabase Cmdlet)。

    2. 第二個選擇是就是,如果擁有者是使用網域帳戶設定工作,則使用者可以使用 SQL Server sp_update_job 預存程序將工作擁有者更新為本機使用者帳戶。

最佳作法是將 SQL Server Agent Windows 服務設定為使用本機登入帳戶執行。 這允許服務在 AppFabric 電腦上執行 (即使該電腦的網路連線中斷)。 若這個服務在網域帳戶下執行,且網域無法存取,則 SQL Server Agent Windows 服務會無法取得認證。 這表示監控事件無法正確地移動到最終目的地資料表。 因此,沒有新的資料會顯示在 [儀表板] 上。

SQL Server Express 工作

雖然診斷工作失敗原因的步驟與 SQL Server 非常類似,您將需要查看 SQL Server Express 的 ASJobsTable 資料表。這個資料表專用於 SQL Server Express 安裝,在 SQL Server 安裝中不存在。 在此資料表中,您可以檢視特定工作資料列之 [LastRunOn] 與 [LastRunSuccess] 資料行的值,以判斷工作執行成功或失敗。

SQL Server Express 不使用 SQL Server Agent Windows 服務, 而是使用 SQL Service Broker。Service Broker 功能中有一個時間功能,它會將逾時值設定為 Microsoft_ApplicationServer_Monitoring_AutoPurge_<監控資料庫名稱> 工作設定執行的間隔。 經過此逾時間隔時,系統會傳送一個訊息給 SQL Server 工作佇列。 此訊息會啟用隨著 Microsoft_ApplicationServer_Monitoring_AutoPurge_<監控資料庫名稱> 工作執行的預存程序。 接著,會對 SQL Server Express 儲存區執行自動清除功能。

以下列出一些可協助您監控自動儲存區清除功能進度的 T-SQL 查詢:

  • 顯示目前已排程的工作: SELECT * FROM ASJobsTable

  • 查看 dialog_timer 資料行 (UTC 時間) 以檢視工作排程下次執行的時間: SELECT * FROM sys.conversation_endpoints

  • 顯示目前執行中啟用程序的數目: SELECT * FROM sys.dm_broker_activated_tasks

  • 檢視佇列中的訊息數目。 當沒有工作在執行時,會傳回 0: SELECT * FROM ASScheduledJobQueue

另請參閱

參考資料

Windows Server AppFabric 儀表板頁面
持續性 WF 執行個體頁面
追蹤的 WF 執行個體頁面
追蹤的事件頁面

  2011-12-05