文章編號: 918643 - 上次校閱: 2009年5月27日 - 版次: 9.0

如何疑難排解記憶體遺漏或記憶體不足例外狀況在 BizTalk Server 處理序中

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。

在此頁中

全部展開 | 全部摺疊

結論

記憶體遺漏 (Memory Leak) 是一個常見的問題。您可能需要嘗試在 Microsoft BizTalk Server 中尋找特定的記憶體遺漏或記憶體不足 (OOM) 例外狀況原因的幾個步驟。本文將告訴您正在評估記憶體用量和可能的記憶體相關問題時要考慮的重要事項。這些考量包括下列:
  • 實體 RAM
  • 大型訊息處理
  • 使用的 / 3GB 切換
  • 自訂元件的使用
  • 哪個版本的系統執行時,Microsoft.NET Framework
  • 處理器數目

簡介

本文將告訴您,如何疑難排解記憶體遺漏或記憶體不足例外狀況在 BizTalk Server 處理序中的 Microsoft BizTalk Server。

其他相關資訊

當 Microsoft Windows 工作管理員] 中的記憶體使用量會消耗超過 50%的實體 RAM,BizTalk Server 處理序可能會遭遇記憶體遺漏。記憶體使用量會增加,直到處理程序執行的系統記憶體不足,或直到處理序停止運作時,記憶體遺漏可能會造成記憶體不足例外狀況。

這個問題時警告訊息,類似下列的訊息會記錄事件記錄檔:

鍵入事件: 警告
事件類別目錄: (1)
事件識別碼: 5410
描述: 已時發生錯誤,要求 BizTalk 服務終止。最常見的原因為一個未預期超出記憶體錯誤並無法連線或其中一個 BizTalk 資料庫的連線中斷。服務將會關機並自動重新啟動在 1 分鐘。如果有問題的資料庫後頁,就會重複此循環。
錯誤訊息: 型別 System.OutOfMemoryException 擲回的例外狀況。
錯誤來源:
BizTalk 主控件名稱: BizTalkServerApplication
Windows 服務名稱: BTSSvc {DCC899FE-C62F-41BE-851A-8720B2EB9C14}

事件類型: 警告
事件類別目錄: (1)
事件識別碼: 5410
描述: 錯誤發生,需要 BizTalk 服務終止。最常見的原因如下: 1) 發生未預期的記憶體不足的錯誤。OR 2) 將無法連線或其中一個 BizTalk 資料庫的連線中斷。服務將會關機並自動重新啟動在 1 分鐘。如果有問題的資料庫後頁,就會重複此循環。
錯誤訊息: 型別 'System.OutOfMemoryException' 擲回的例外狀況。
錯誤來源: Mscorlib
BizTalk 主控件名稱: BizTalkServerApplication
Windows 服務名稱: BTSSvc $ BizTalkServerApplication

重要考量事項

實體的 RAM 及記憶體使用量

因為它可能會讓處理序 (Process) 使用大約一半實體的 RAM,請使用記憶體使用量做為指引預期的行為。比方說如果 BizTalk Server 具有 4 GB 的 RAM,並 BizTalk Server 處理序使用約 500 MB 的 RAM,可能遺漏。如果 BizTalk Server 處理序會使用大約 1 GB 的 RAM,可能有記憶體流失或高記憶體的情況。記憶體耗用量的原因可能是長時間執行的預存程序或協調流程。請確定您知道 BizTalk 主應用程式通常使用,以判斷是否發生記憶體遺漏或高記憶體條件多少記憶體。

大型郵件

當 BizTalk Server 處理大郵件時,系統似乎有記憶體流失。不過,郵件可能正在使用大量的記憶體。如需有關大型郵件的詳細資訊,請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站]:
http://blogs.msdn.com/biztalk_core_engine/archive/2005/02/28/381700.aspx (http://blogs.msdn.com/biztalk_core_engine/archive/2005/02/28/381700.aspx)
而且,請考慮是否 BizTalk Server 正在處理較大的郵件可能會預期高的記憶體使用量。若要升級您的硬體,以符合您的環境中 BizTalk Server 效能需求。

重新產生記憶體遺漏所花費

可以立即發生記憶體遺漏 (Memory Leak),或他們可能會累積經過一段時間。這兩種案例是公用的。

使用 / 3GB 參數,在 32 位元電腦上

通常,處理程序可以存取 2 GB 的虛擬位址空間。/ 3GB 參數是需要更多的定址記憶體的系統上的選項。這個選項會改進處理訊息的記憶體使用量。不過,/ 3GB 參數允許只有 1 GB 的核心模式下作業的定址記憶體。此外,這個參數可能會增加風險的集區記憶體不足。

如 3 GB 的相關資訊切換,請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站]:
http://msdn.microsoft.com/en-us/library/ms791558.aspx (http://msdn.microsoft.com/en-us/library/ms791558.aspx)
/ 3GB 參數在 32 位元版本的 Windows 上啟用、 處理序可以存取 3 GB 的虛擬位址空間,如果處理程序是大型位址注意。 處理程序是大型位址時可執行檔已經在映像標頭中設定了 IMAGE_FILE_LARGE_ADDRESS_AWARE 旗標。因為 BizTalk 程序是大型位址注意,BizTalk 會獲益 / 3GB 參數。

如果執行在 64 位元版本的 Windows (AMD64) 上的 32 位元 BizTalk 主控件執行個體 BizTalk 程序好處,從 4 GB 記憶體位址空間因為 BizTalk 是大型位址注意。因此,移動到 64 位元伺服器應用程式最高的記憶體,可能是最佳的解決方案。

在 64 位元版本的 Windows (AMD64) 在 64 位元 BizTalk 程序沒有 8 TB 定址記憶體。

您也應該考慮虛擬位元組和處理序所使用的私用位元組。BizTalk 主控件執行個體 (也就是.NET Framework 應用程式) 可能會收到一個記憶體不足的錯誤之前虛擬位元組值到達 2 GB。就會發生這個問題即使可定址的最大記憶體由處理序在 32 位元版本的 Windows 上 (而不需 / / 3GB 切換) 為 2 GB。如就為什麼會發生這個問題的說明請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站:
http://msdn.microsoft.com/en-us/library/ms972959.aspx (http://msdn.microsoft.com/en-us/library/ms972959.aspx)
http://blogs.msdn.com/tess/archive/2005/11/25/496898.aspx (http://blogs.msdn.com/tess/archive/2005/11/25/496898.aspx)
/ 3GB 參數也會增加 BizTalk 程序從 800 MB 到 1800 MB 的最大的私用位元組。與.NET Framework 應用程式效能的相關資訊之 / / 3GB 參數啟用,請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站:
http://msdn2.microsoft.com/en-us/library/ms998583.aspx (http://msdn2.microsoft.com/en-us/library/ms998583.aspx)
下表摘要了這項資訊,並包括虛擬位元組和私用位元組實際的限制。
摺疊此表格展開此表格
處理程序Windows定址記憶體 (與大型位址知道處理序)實際的限制,如虛擬位元組實際的限制為私用位元組的
32 位元32 位元2 GB1400 MB800 MB
32 位元32 位元以 3 GB3 GB2400 MB1800 MB
32 位元64 位元4 GB3400 MB2800 MB
64 位元64 位元8 TB不適用不適用
如需有關 32 位元與 64 位元 Windows 的可定址記憶體數量的詳細資訊,請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站]:
http://msdn.microsoft.com/en-us/library/aa366778.aspx (http://msdn.microsoft.com/en-us/library/aa366778.aspx)
下表列出不同版本的 BizTalk Server PAE 與 / 3GB 支援能力。
摺疊此表格展開此表格
產品PAE3 GB
BizTalk Server 2004是的
BizTalk Server 2006是的是的
BizTalk Server 2006 R2是的是的
BizTalk Server 2009是的是的
如果您必須啟用 / 3GB 切換至符合執行 BizTalk Server 的電腦的效能需求,您可能要考慮將伺服器新增至 BizTalk 群組。這可讓您擴充需要大量記憶體的主控件執行個體。

網際網路資訊服務 (IIS) 處理序內執行的 BizTalk 元件也可能獲得好處何時 / 3GB 參數啟用。

/ 3GB 執行 Windows SharePoint 服務 2.0 或更新版本或 SharePoint 入口網站 Server 2003 SP2 或更新版本的電腦上不支援參數。如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
933560? (http://support.microsoft.com/kb/933560/ ) 不支援 Windows Server 2003 / 3GB 參數,以 Windows SharePoint 服務 2.0 或更新版本中或在 SharePoint 入口網站伺服器 2003年服務套件 2 或更新版本中

自訂元件的使用

如果您使用如管線或服務元件的自訂元件,您必須知道這些元件執行什麼動作。 您也必須知道對記憶體使用量,將這些元件的潛在之影響。當元件轉換文件時,就會發生常見的記憶體問題。轉換操作是需要大量記憶體的作業。當轉換文件 BizTalk Server 會將訊息資料流傳遞給 Microsoft.NET Framework XslTransform 類別 BizTalk 處理序中。

使用大量字串操作時,就會發生另一個常見的問題。使用大量字串操作會消耗大量記憶體。如需有關改善效能的方法的詳細資訊,請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站]:
http://msdn2.microsoft.com/en-us/library/ms998547 (http://msdn2.microsoft.com/en-us/library/ms998547)

.NET Framework 版本

Microsoft.NET Framework 2.0 和.NET Framework 1.1 有不同的記憶體行為。因此,您可能會看到它們之間的不同結果。 如果您使用.NET Framework 1.1,確認.NET Framework 1.1 Service Pack 1 (SP1) 安裝。SP1 解決許多記憶體問題。 如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
867460? (http://support.microsoft.com/kb/867460/ ) .NET Framework 1.1 Service Pack 1 中所修正的 Bug 清單

處理器數量

通用語言執行階段 (CLR) 具有下列的記憶體回收行程 (GC):
  • 工作站 (mscorwks.dll)
  • 伺服器 (Mscorsvr.dll)
如果執行 BizTalk Server 的電腦是多處理器系統,.NET Framework 會使用伺服器版本執行引擎。這是預設行為。伺服器記憶體回收行程是專為最大輸送量設計的。此外,伺服器記憶體回收行程縮放提供極高的效能。這個記憶體回收行程會配置記憶體,並稍後釋放記憶體,來提供高效能在系統上。 因此,執行之電腦是 BizTalk Server 搭配某些.NET Framework 元件似乎有記憶體流失。不過,在這種情況下高記憶體使用量會是預期的行為。如果電腦執行的系統記憶體不足,或處理程序會因為的可定址的記憶體不足,無法停止運作,可能存在記憶體遺漏的狀況。

如果執行 BizTalk Server 的電腦是單一處理器系統,.NET Framework 會使用工作站版本的執行引擎。這是預設行為。工作站記憶體回收行程配置演算法不被設計或最大輸送量的縮放比例。這個記憶體回收行程會使用並行的記憶體回收行程的方法。這些方法是專為有複雜的使用者介面的應用程式而設計。這類應用程式可能需要更積極的回收。

重要這個區段、 方法或任務包含告訴您如何修改登錄的步驟。然而,如果您不當修改登錄,可能會發生嚴重的問題。因此,執行這些步驟時請務必小心。為加強保護,修改登錄之前,請務必將它備份起來。以後您就可以在發生問題時還原登錄。如需有關如何備份和還原登錄的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
322756? (http://support.microsoft.com/kb/322756/ ) 如何備份和還原在 Windows 登錄
有時候,可能適合在多處理器系統上執行的執行引擎工作站版本。若要切換到的執行引擎工作站版本,您可以使用下列登錄機碼:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\BTSSvc{7F09E353-4EFC-440B-249D-9D4ED58795FB}\


數值名稱: 類別
實值型別: 字串
值的資料: wks
如需詳細資訊請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站]:
http://msdn2.microsoft.com/en-us/library/ms973838 (http://msdn2.microsoft.com/en-us/library/ms973838)

http://msdn.microsoft.com/msdnmag/issues/1200/GCI2/default.aspx (http://msdn.microsoft.com/msdnmag/issues/1200/GCI2/default.aspx)

常見的原因和解決方案

處理序的記憶體用量和實體記憶體使用量節流閾值

處理序記憶體使用量實體記憶體使用量 節流臨界值可在 BizTalk Server 2006 和更新版本中變更。
  • 預設情況下,處理程序的記憶體使用量 節流閾值設定為 25。如果超過這個值,且 BizTalk 處理程序的記憶體使用量超過 300 MB,節流條件可能會發生。您可以在 32 位元伺服器上增加處理序記憶體使用量值設為 50。在 64 位元伺服器上,您可以增加這個值設為 100。這可讓更多的記憶體耗用量 BizTalk 處理程序節流發生之前。
  • 實體記憶體使用量 節流閾值具有預設值為 0。此閾值會測量總系統記憶體。因此,如果設定值以外 0 節流條件可能會發生如果非 BizTalk 處理序正在使用大量記憶體。
如需有關節流臨界值的詳細資訊,請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站]:
http://msdn.microsoft.com/en-us/library/aa559628.aspx (http://msdn.microsoft.com/en-us/library/aa559628.aspx)

凍結節流閾值

64 位元的主控件上執行的協調流程時,預設記憶體凍結臨界值可能會造成過多的凍結。如需有關這個問題的詳細資訊,請參閱下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站上的 凍結預設內容 主題:
http://msdn.microsoft.com/en-us/library/aa560586.aspx (http://msdn.microsoft.com/en-us/library/aa560586.aspx)
附註 64 位元主機支援 BizTalk Server 2006 和更新版本中。

32 位元的主控件執行個體中的對等硬體上, 觀察到的凍結時名義上利用節流閾值的預設記憶體凍結執行相同的協調流程。

因為 64 位元架構提供擴充的記憶體位址空間 (16 TB 代替 4 GB),64 位元的主控件執行個體配置比 32 位元的主控件執行個體大幅更多的記憶體。 這可能會造成預設記憶體節流閾值,以超過。

如果要解決這個問題,變更 BTSNTSvc64.exe.config 檔案 [VirtualMemoryThrottlingCriteria 和 PrivateMemoryThrottlingCriteria 值。用於 Process\Virtual 位元組和 Process\Private 位元組效能監視器計數器判斷協調流程執行個體配置的記憶體最大數量。
  • 將根據下列這兩個屬性 OptimalUsage 值的設定:
    VirtualMemoryThrottlingCriteria: \Process\Virtual 位元組值 + 10 %
    PrivateMemoryThrottlingCriteria: \Process\Private 位元組值 + 10 %
  • 這兩個屬性到 OptimalUsage 值 + 30%的集 MaximalUsage
比方說如果 \Process\Virtual 協調流程執行個體的位元組數效能監視器計數器值 5,784,787,695 位元組 (5,517 MB) 將 OptimalUsage 值設定為 VirtualMemoryThrottlingCriteria 6,069 MB (5,784,787,695 * 1.10 = 6,363,266,464.5 位元組)。MaximalUsage 值設為 VirtualMemoryThrottlingCriteria 7,889 MB (6,363,266,464.5 * 1.30 = 8,272,246,403.85 位元組)。

如果 \Process\Private 位元組效能監視器計數器值 435689400 位元組 (415 MB) 請 OptimalUsage 值設為 PrivateMemoryThrottlingCriteria 457 MB (435689400 * 1.10 = 479258340 位元組)。MaximalUsage 值設為 PrivateMemoryThrottlingCriteria 594 MB (479258340 * 1.30 = 623035842)。

為使本範例會將下列值指定以減少節流 BTSNTSvc64.exe.config 檔案中。
摺疊此表格展開此表格
效能監視器計數器配置記憶體OptimalUsageMaximalUsage
\Process\Virtual 位元組5784787695 位元組 (5517 MB)60697889
\Process\Private 位元組435689400 位元組 (415 MB)457594
這些值然後可表示 BTSNTSvc64.exe.config 檔案中,如下所示:
<xlangs>
      <Configuration>
                  <Dehydration>
                              <VirtualMemoryThrottlingCriteria OptimalUsage="6069" MaximalUsage="7889" IsActive="true" />
                              <PrivateMemoryThrottlingCriteria OptimalUsage="457" MaximalUsage="594" IsActive="true" />
                  </Dehydration>
      </Configuration>
</xlangs>
來判斷哪一個主控件執行個體正在執行協調流程,您可以符合識別碼處理程序從 \BizTalk:Messaging\ID 處理程序和 \Process\ID 處理程序效能監視器計數器。然後,檢查平均對應 \Process\Virtual 位元組和 \Process\Private 位元組效能監視器計數器所顯示的值。

附註過度凍結在 BizTalkMsgBoxDb 資料庫正在執行 SQL Server 2008 上時,可能會導致明顯而導致效能降低。

BizTalk Server 2004

如果您正在使用 BizTalk Server 2004,可能會遇到一些記憶體相關問題。如果要解決這些問題,套用 BizTalk Server 2004 Service Pack 2 (SP2)] 及 [最新的作業系統 Service Pack。

HeapDeCommitFreeBlockThreshold

根據預設,theHeapDeCommitFreeBlockThreshold 登錄機碼值是 0。0 表示堆集管理 decommits,就可以使用每一 4 千位元組 (KB)] 頁的值。decommit 作業可能會導致虛擬記憶體分散。HeapDeCommitFreeBlockThreshold 設定堆積管理員中的大小將視系統正在進行的工作種類而定。0x00040000 大小是建議的起始值。

變更
HeapDeCommitFreeBlockThreshold
登錄機碼的值之前,請考慮下列資訊:
  • 這項變更只會套用到記憶體片段的問題。
  • 這項變更是全系統。因此,大部分的處理程序會在啟動時使用更多的記憶體。
  • 只考慮這項變更他們的主要任務為 BizTalk Server 的系統。
若要協助減少虛擬記憶體分散,您可以藉由變更下列登錄機碼值增加 HeapDeCommitFreeBlockThreshold 設定堆積管理員中的大小:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager


數值名稱: HeapDeCommitFreeBlockThreshold
實值型別: REG_DWORD
值的資料: 0x00040000 (這是建議的起始值)。
預設的值: 沒有顯示出來
如需有關 HeapDeCommitFreeBlockThreshold 登錄機碼,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
315407? (http://support.microsoft.com/kb/315407/ ) HeapDecommitFreeBlockThreshold 」 登錄機碼

轉換作業

BizTalk Server 會在中傳送埠的接收埠執行相當大的郵件上的 XML 轉換作業,或在 [XLANG,XSL 轉換時載入記憶體中的整個訊息

如果要解決這個問題,使用下列方法之一:
  • 減少 BizTalk Server 處理在同一時間的訊息數。
  • 縮小轉換是 XML 訊息。
System.Policy.Security.Evidence 物件通常會用於轉換,同時會消耗記憶體。每當對應包含內嵌 C# (或任何其他的內嵌語言) 會使用的指令碼處理運算質,便會在記憶體中建立組件。System.Policy.Security.Evidence 物件使用實際的呼叫組件的物件。這種情況下建立 BizTalk 服務重新啟動之前,不會刪除的根的物件。

大部分的預設 BizTalk 運算質會實作成內嵌指令碼。這些項目可能會造成 System.Byte 收集在記憶體中的 [] 物件。減到最少記憶體耗用量,我們建議您將放到小的組件會使用這些運算質的地圖。然後,參考該組件。 若要判斷哪一個運算質使用內嵌指令碼使用下列的圖表,並哪一個運算質不使用內嵌指令碼。

是第二欄中 「] 」 表示此運算質實作為內嵌指令碼以及它會造成收集 System.Byte [] 物件在記憶體中。「 無 」 表示此運算質未實作做為內嵌指令碼,它不會造成 System.Byte 收集在記憶體中的 [] 物件。
摺疊此表格展開此表格
運算質內嵌指令碼嗎?
所有字串運算質是的
所有的數學運算質是的
除了 IsNil 以外的所有邏輯運算質是的
邏輯 IsNil 」 運算質
所有日期/時間運算質是的
所有的轉換運算質是的
所有科學運算質是的
所有的累計運算質是的
所有資料庫運算質
進階運算質內嵌指令碼嗎?
迴圈運算質
值對應運算質簡維
判斷提示 (Assert) 運算質
表格抽選程式運算質
表格迴圈 」 運算質
具有內嵌 C# 指令碼處理運算質是的
指令碼處理運算質,以 inline JScript.NET是的
以 inline Visual Basic.NET 指令碼處理運算質是的
使用內嵌 XSLT 指令碼處理運算質
使用內嵌 XSLT 呼叫範本指令碼處理運算質
呼叫外部組件的指令碼處理運算質
Nil 值 」 運算質
值對應運算質
大量複製運算質
反覆項目運算質
索引運算質
記錄計數運算質
BizTalk Server 2006 和更新版本大幅提升大文件的記憶體管理。如果要執行這項操作,BizTalk Server 會實作可設定的訊息大小臨界值的載入記憶體中的文件,轉換作業期間。 預設訊息大小臨界值是 1 MB。如需有關 [TransformThreshold] 設定的詳細資訊,請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站]:
http://msdn2.microsoft.com/en-us/library/aa560481.aspx (http://msdn2.microsoft.com/en-us/library/aa560481.aspx)

大型的屬性值和大型的項目值

BizTalk Server 在 XML 文件上執行接收管線] 或 [傳送管線時, 如果文件中包含一或多個下列的實體,將處理裝載在記憶體中:
  • 大型的屬性值
  • 大型的項目值
  • 大型的屬性或項目標籤
若要解決這個問題,限制這些實體大小。如果這個方法是不可能的請確定 BizTalk HOST 執行個體不會處理多個文件,例如,這些在同一時間。

自訂管線元件

您正在使用整個資料流載入記憶體的自訂管線元件。所包含的 BizTalk Server 轉換,以外的所有元件都支援資料流。這些元件並不會使用期間資料流一樣多的記憶體。不過,自訂管線元件可能不支援資料流。

重裝壓力之下串流處理

傳送主機記憶體用完時它們操作重型壓力之下。 BizTalk Server 傳送管線和傳送配接器支援資料流。資料流處理中, 每個元件會載入至記憶體資料流的小片段。 因為每個訊息包含加上可以是大或小的訊息內容的其他資料結構這種行為會影響重型壓力之下的 BizTalk Server 行為。

BizTalk Server 行為會受到影響,因為引擎載入預先設定的郵件數目。引擎載入的郵件數目根據出現在 [LowWaterMark 欄位及 Adm_serviceClass 資料表的 [HighWaterMark] 欄位的值。 Adm_serviceClass 資料表位於 BizTalk 管理資料庫。這些值會控制 BizTalk Server 處理,或在同一時間傳送的郵件的數目。

HighWaterMark 值是引擎處理在同一時間的訊息總數。預設值為 200 的訊息,每個 CPU。因此,8 個處理器伺服器上傳送主機會試著在同一時間處理 1,600 訊息 (200 * 8)。如果您假設每個訊息為 50 KB,郵件等號 80 MB (1、 600 * 50 = 80,000 KB)。

如果要解決這個問題,您可以變更 HighWaterMark 值和資料庫中的 LowWaterMark 值。您使用的值是根據訊息的大小而定。

記憶體不足狀況的常見原因的相關資訊,請參閱 「 記憶體等比在 BizTalk 傳訊 」 一節在下列 Microsoft 網站:
http://blogs.msdn.com/biztalkperformance (http://blogs.msdn.com/biztalkperformance)
BizTalk Server 2006 和更新版本,您可以變更預設主控件節流設定。如需有關如何變更預設主控件節流設定的詳細資訊,請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站]:
http://msdn2.microsoft.com/en-us/library/aa559628.aspx (http://msdn2.microsoft.com/en-us/library/aa559628.aspx)

請試著簡化問題

如果您已找出記憶體遺漏,請試著判斷原因,藉由移除自訂元件或簡化地圖。而且,嘗試重現問題,使用簡單的協調流程或簡單的解決方案。通常,您應該建立個別接收主機的接收配接器。您也應該建立傳送配接器的個別傳送主機。當您使用這種方式時,每個介面卡可以在不同的處理序中執行。因此,如果您的 BizTalk Server 處理序中發生記憶體不足狀況就會知道涉及哪些元件。

疑難排解步驟

若要記憶體不足狀況的疑難排解使用偵錯診斷 」 工具來監視記憶體配置經過一段時間。偵錯診斷工具可以建立並分析記憶體遺漏傾印 (.dmp) 檔案。當您疑難排解記憶體遺漏 (Memory Leak) 時,目標是高記憶體條件來擷取經過一段時間的記憶體成長會重現之前附加 Leaktrack.dll。Leaktrack.dll 會包含與 「 偵錯診斷 」 工具。
  1. 安裝偵錯診斷工具。

    下列檔案是可以從 Microsoft 下載中心 」 下載:

    摺疊此圖像展開此圖像
    Download
    Download the Debug Diagnostic Tool package now. (http://www.microsoft.com/downloads/details.aspx?FamilyID=28bd5941-c458-46f1-b24d-f60151d875a3)

    如需有關如何下載 Microsoft 支援檔案的詳細資訊,按一下 [下列面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
    119591? (http://support.microsoft.com/kb/119591/ ) 如何從線上服務取得 Microsoft 的支援檔案
    Microsoft 已掃描這個檔案有無病毒。Microsoft 使用已張貼檔案的日期中的 [可用的最新病毒偵測軟體。檔案儲存在安全性強化的伺服器上,協助防止未經授權的任何變更的檔案。
  2. 使用效能監視器來收集有關系統效能資料。此資料可能會提供有關效率的 BizTalk Server 環境的重要指標。目標是要擷取經過一段時間的處理程序效能。因此,啟用效能監視器記錄之前發生記憶體遺漏。

如何使用效能監視器記錄

選取要記錄的資料
選取資料記錄,請使用適合您作業系統的方法:
  • 為 Windows Server 2008
    1. 在 [系統管理工具開啟 可靠性和效能監視器
    2. 效能監視器] 上按一下滑鼠右鍵,按一下 [新增],然後再按一下 [資料收集器集合工具
    3. 在 [名稱] 方塊中輸入描述性的名稱,然後按一下 [下一步]。
    4. 請注意根目錄的目錄,然後按一下 [下一步]。
    5. 按一下 [開始] 現在設定這個資料收集器,然後按一下 [完成]
    6. 展開 [資料收集器集合工具、 展開 [使用者定義,然後選取您的檔案。
    7. 系統監視器記錄檔 上, 按一下滑鼠右鍵,然後再按 [內容]
    8. 按一下上的 [新增 效能計數器] 索引標籤,選取 下列物件,然後按一下 [新增],選取每個物件之後:
      • .NET CLR 例外狀況
      • .NET CLR 記憶體
      • BizTalk: 通訊
      • BizTalk:TDDS
      • 記憶體
      • 處理程序
      • 處理器
      • XLANG/s 協調流程
      如果 SQL Server 是在本機,也新增下列物件:
      • SQLServer:Databases
      • SQLServer:General 統計資料
      • SQLServer:Memory 管理員
    9. 按一下 [確定]
    10. 範例間隔值] 方塊變更為 5 秒

      附註範例間隔值和時間才能啟動監視是主觀。這些值而定時再次出現記憶體遺漏。因為記錄檔可能大,指定在其中您可以取得您必須具有不含充斥伺服器資訊的間隔。
    11. 按一下 [確定]
    要停止收集資料,請按一下 [執行] 功能表上的 [停止]。
  • 針對 Windows Server 2003 或 Windows XP
    1. 展開 [效能記錄及警示]。
    2. 以滑鼠右鍵按一下 [計數器記錄檔,然後按一下 [新增記錄檔設定新增記錄檔設定] 對話方塊隨即出現。
    3. 在 [名稱] 方塊中輸入描述性的名稱,再按 [確定]
    4. 請注意記錄檔位置。(您可以也按一下 [記錄檔] 索引標籤,然後按一下 [設定] 來變更記錄檔位置)。
    5. 按一下 [新增計數器]。
    6. 選取 [所有計數器所有執行個體
    7. 效能物件] 清單中選取下列的物件。選取每個物件之後,請按一下 [新增]。
      • .NET CLR 例外狀況
      • .NET CLR 記憶體
      • BizTalk: 通訊
      • BizTalk:TDDS
      • 記憶體
      • 處理程序
      • 處理器
      • XLANG/s 協調流程
      如果 SQL Server 是在本機,也新增下列物件:
      • SQLServer:Databases
      • SQLServer:General 統計資料
      • SQLServer:Memory 管理員
    8. 按一下 [關閉]。
    9. 在將值變更 資料取樣間隔 為 5 秒。

      附註資料取樣間隔值和時間才能啟動監視是主觀。這些值而定時再次出現記憶體遺漏。因為記錄檔可能大,指定在其中您可以取得您必須具有不含充斥伺服器資訊的間隔。
    10. 按一下 [確定]
    若要停止收集資料,計數器記錄檔的名稱上按一下滑鼠右鍵,然後按一下 [停止]。
取得傾印檔案
如果要取得傾印檔案,使用下列方法之一:
  • 方法 1: 自動
    建立記憶體和控制代碼遺漏規則與 DebugDiag 是建議的方法來擷取記憶體傾印。記憶體和控制代碼遺漏規則自動附加 Leaktrack.dll。這用來追蹤記憶體配置。如果要建立記憶體和控制代碼遺漏規則,請依照下列步驟執行:
    1. 啟動偵錯診斷工具 1.1。
    2. 選取 記憶體和控制代碼遺漏,然後按一下 [下一步]。
    3. 選取 Btsntsvc.exe 處理程序,然後按一下 [下一步]
    4. 在 [設定遺漏規則] 頁面上,請依照下列步驟執行:
      1. 按一下以選取 開始記憶體啟用規則時,立即追蹤] 核取方塊。否則,您可以指定準備時間,才能 LeakTrack.dll 插入 BTSNTSvc.exe 程序中。
      2. 按一下 [設定],然後執行 [下列動作:
        • 確認 自動建立當機規則 已選取。選取 [這個] 選項的記憶體傾印就會自動建立如果 BTSNTSvc.exe 處理序終止。
        • 按一下以選取 [產生 userdump 虛擬位元組到達時] 核取方塊,並保留預設值為 1024年
        • 按一下以選取 [與每個額外]],並保留預設值為 200。
        藉由選取虛擬位元組到達選項、 記憶體傾印會自動建立時機虛擬位元組會使用 1024 MB。如果虛擬位元組增加 200 MB 時,會自動建立另一個記憶體傾印。
      3. 按一下 [下一步]。
      4. 按一下 [儲存及關閉.
    5. 在 [選取傾印的位置] 和 [規則名稱] 頁面中,按一下 [下一步]。

      附註您也可以變更 Userdump 位置] 方塊中傾印的檔案在此頁面上的路徑。
    6. 按一下 [完成] 現在使規則作用。
    附註現在追蹤規則狀態。每次建立記憶體傾印的值將會提高 Userdump 計數] 資料欄,在 [規則] 索引標籤上。預設的記憶體傾印位置是 C:\Program Files\DebugDiag\Logs。
  • 方法 2: 手動
    可以手動附加 Leaktrack.dll 並手動取得記憶體傾印檔案。這可讓您控制建立記憶體傾印時。要這麼做,請您執行下列步驟:
    1. 啟動偵錯診斷工具 1.1。
    2. 按一下 [處理程序] 索引標籤。
    3. 以滑鼠右鍵按一下 Btsntsvc.exe 處理程序,然後按一下 [遺漏的監視器
    4. 偵錯診斷工具] 對話方塊按一下 [是],再按 [確定]
    建立當機規則來監視相同的 Btsntsvc.exe 程序,萬一前您可以建立記憶體傾印終止處理程序:
    1. 開始偵錯診斷工具 1.1。
    2. 選取 故障,然後按一下 [下一步]
    3. 選取 特定的程序,然後按一下 [下一步]
    4. 選取相同 Btsntsvc.exe 處理序,然後按一下 [下一步]。
    5. 在 [進階組態 (選用)] 頁面中,按一下 [下一步]。
    6. 在 [選取傾印位置及規則名稱 (選用)] 對話方塊中,按一下 [下一步]。
    7. 選取 [啟動規則現在,然後再按一下 [完成]。
    當處理程序達到 60%到 80%的 RAM 時,Btsntsvc.exe 處理程序上按一下滑鼠右鍵,然後再按 [建立完全 Userdump。如果前您可以建立使用者傾印,就會終止 BizTalk 程序,損毀規則應該才會生效,並建立記憶體傾印。
停止效能監視器記錄
如果您擷取記憶體傾印和效能監視器資料,停止 [效能監視器記錄大約兩分鐘後建立記憶體傾印]。
分析傾印檔案
若要協助您判斷記憶體遺漏的原因,您可以使用偵錯診斷 」 工具來分析傾印檔案。要這麼做,請您執行下列步驟:
  1. 按一下 [進階分析] 索引標籤。
  2. 按一下 [新增資料檔案,然後再找出.dmp 檔案。
  3. 選取 記憶體壓力分析 指令碼,並再按一下 [開始分析
預設情況下,分析報表檔案 (.mht) 將會建立 C:\Program Files\DebugDiag\Reports 資料夾中分析完成時。 報表檔案也會顯示在您的瀏覽器中。報表檔案包含分析的結果。此外,報告檔可能包含如何解決記憶體流失的建議。

如果您使用 [自訂的 DLL,您可以新增自訂的.pdb 檔案進行分析的符號路徑。要這麼做,請您執行下列步驟:
  1. 開啟偵錯診斷 」 工具。
  2. 在 [工具] 功能表上按一下 [選項] 及 [設定]。
  3. 偵符號搜尋路徑的錯 方塊中,輸入符號路徑。
視分析傾印檔案的說明,請連絡 Microsoft 客戶支援服務。如需完整清單的客戶支援服務電話號碼及支援成本的相關資訊請造訪下列 Microsoft 網站:
http://support.microsoft.com/contactus/?ws=support (http://support.microsoft.com/contactus/?ws=support)
請聯絡客戶支援服務之前先壓縮傾印檔案]、 [效能監視器記錄檔]、 [分析報告檔案] 及 [更新的事件記錄檔 (.evt 檔案)。您可能必須傳送到 BizTalk Server 這些檔案支援工程師。

這篇文章中的資訊適用於:
  • Microsoft BizTalk Server 2009 Branch
  • Microsoft BizTalk Server 2009 Developer
  • Microsoft BizTalk Server 2009 Enterprise
  • Microsoft BizTalk Server 2009 Standard
  • Microsoft BizTalk Server 2006 Enterprise Edition
  • Microsoft BizTalk Server 2006 Developer Edition
  • Microsoft BizTalk Server 2006 Standard Edition
  • Microsoft BizTalk Server 2004 Enterprise Edition
  • Microsoft BizTalk Server 2004 Developer Edition
  • Microsoft BizTalk Server 2004 Partner Edition
  • Microsoft BizTalk Server 2004 Standard Edition
關鍵字:?
kbmt kbhowto KB918643 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:918643? (http://support.microsoft.com/kb/918643/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。