症狀
假設您有一個在 Windows 7 或 Windows Server 2008 R2 中執行的應用程式或工具,並且該應用程式或工具執行以下一個或多個工作:
- 使用 ICMP 或 ping.exe 監視其他伺服器
- 啟動多個短期進程來執行工作,然後停止進程
- 執行任何網路活動,然後另一個應用程式或指令碼停止該過程
在此情況下,在伺服器連續執行數小時或數天之後,您會注意到 NSI) 服務的網路存放介面 (記憶體流失。 此外,您也會注意到下列徵狀:
- 如果您停止監控軟體,記憶體流失就會停止。
- 如果您停止應用程式,再重新啟動電腦,NSI 服務中就不會發生記憶體流失的情形。
- 在某些情況下,如果您先停用網路介面卡,然後又啟用網路介面卡,您會注意到 NSI 服務的 CPU 使用量突然激增。 此外,記憶體使用量會立即從 1 或 2 GB (GB) 下降到 200 或 300 MB (MB) 。
在下列任何情況下,可能會發生此問題。
案例 1
如果強制停止 ping.exe 之類的應用程式,可能不會呼叫 IcmpCloseHandle 函 式。 在此情況下,NSI 服務可能會偵測到有可用的用戶端。 因此,服務會持續傳送有關任何 ICMP 訊息的通知。 因為用戶端不存在,通知清單會持續增加。 在 NSI 服務停止之前,該清單不會被清除。
若要傳送 Ping,您必須開啟 ICMP 控制碼,然後使用下列其他 IP 協助程式函式來傳送和接收 ICMP 資料:
應用程式傳送 ping 之後,必須呼叫 IcmpCloseHandle 函式 來關閉 ICMP 控制代碼。
案例 2
軟體開發人員使用 IPHlelper API 建立應用程式來傳送和接收 ICMP 訊息。 如果只使用一個 ICMP 控制碼為多個用戶端傳送 ICMP 訊息,而且如果這樣做的速率非常高,則收到訊息時收到通知的 IPHelper API 無法維持此速度。 在此情況下,您會注意到 NSI 服務記憶體持續呈指數級增長。 此外,您會注意到 NSI 服務 (nsisvc.dll) 的高 CPU 使用率。
案例 3
您擁有直接或間接使用 IP 協助程式功能的應用程式或服務。 當每個通知註冊未取消 (CancelMibChangeNotify2) 時,應用程式會停止或被停止,而且不會正常結束。 在這種情況下,NSI 伺服器會讓已停止程序的註冊擱置中。 如果有許多應用程式停止實例,NSI 服務將會有許多延遲註冊。 每個註冊都會維護 RPC 非同步狀態和其他資訊。 這會增加記憶體使用量。 通常,這些註冊是為介面變更或單播 IP 位址變更而進行。 如果狀態沒有變化,這些註冊仍會維持不變。
註冊過程中會使用下列通知功能:
- NotifyAddrChange
- NotifyIpInterfaceChange
- NotifyRouteChange
- NotifyRouteChange2
- NotifyUnicastIpAddressChange
許多應用程式不會呼叫 (CancelMibChangeNotify2) 或停止處理序的原因,已在 Microsoft 開發人員網路網站上的 NotifyIpInterfaceChange 函式 主題中討論。
呼叫 NotifyIpInterfaceChange 函式 以註冊變更通知之後,會繼續傳送這些通知,直到應用程式取消註冊以接收變更通知,或應用程式停止為止。 如果應用程式停止,系統會自動取消註冊任何變更通知註冊。 建議您將應用程式設定為在變更通知停止前明確取消註冊。
對於每個通知註冊,您還要為 NSpc 標籤配置一些非分頁集區 (NPP) 記憶體。
原因
發生此問題的原因是註冊通知的處理程序在未先從 NSI 服務取消註冊的情況下結束。 因此,NSI 中的註冊洩漏會造成 NSI 服務中的記憶體洩漏。 此外,NPP 會在 NSI Proxy 內容標記 NSpc (NSI.dll) 中流失記憶體。
解決方式
Hotfix 資訊
可從 Microsoft 支援服務取得支援的 Hotfix。 不過,此 Hotfix 僅用來修正本文所述的問題。 僅將此 Hotfix 套用至發生本文所述問題的系統。 此 Hotfix 可能會收到其他測試。 因此,若您未受到此問題的嚴重影響,建議您等待下一個包含此 Hotfix 的軟體更新。
如果 Hotfix 可供下載,本知識庫文章頂端有「可供 Hotfix 下載」章節。 如果未顯示此章節,請連絡「Microsoft 客戶服務及支援人員」以取得 Hotfix。
備註 如果發生其他問題或需要進行任何疑難排解,您可能需要建立個別服務要求。 一般的支援費用將適用於不符合此特定 Hotfix 資格的其他支援問題和問題。 如需 Microsoft 客戶服務及支援服務的完整電話號碼清單,或建立個別的服務要求,請移至下列 Microsoft 網站:
http://support.microsoft.com/contactus/?ws=support
備註 「Hotfix 下載可用」表單顯示 Hotfix 可用的語言。 如果您找不到您的語言,是因為該語言沒有 Hotfix。
先決條件
若要套用此 Hotfix,您必須安裝 Windows 7 或 Windows Server 2008 R2 的 Service Pack 1。
重新啟動需求
套用此 Hotfix 之後,您必須重新啟動電腦。
Hotfix 取代資訊
此 Hotfix 不會取代任何先前發行的 Hotfix。
檔案詳細資訊
此 Hotfix 的英文 (美國) 版會安裝具有下表中所列屬性的檔案。 這些檔案的日期與時間是以國際標準時間 (UTC) 表示。 本機電腦上這些檔案的日期與時間,是以您當地的時間和目前的日光節約時間 (DST) 的時差來顯示。 此外,當您對檔案執行特定作業時,其日期與時間可能會改變。
Windows 7 和 Windows Server 2008 R2 檔案資訊和附註
重要 Windows 7 hotfixes 和 Windows Server 2008 R2 的 hotfixes 隨附於相同的套件中。 但是,Hotfix 要求頁面上的 Hotfix 會列在各自的作業系統中。 如果要請求適用於其中一或兩個作業系統的 Hotfix 套件,請選取頁面上列於「Windows 7/Windows Server 2008 R2」下方的 Hotfix。 請一律參照文章中的<適用於>一節,以判定每個 Hotfix 適用的確切作業系統。
可透過查看下列表格中所顯示的檔案版本號碼來識別套用至特定產品、SR_Level(RTM,SPn)及服務分支(LDR、GDR)的檔案:
版本 產品 SR_Level 服務分支 6.1.760 0. 16xxx Windows 7 和 Windows Server 2008 R2 RTM GDR 6.1.760 1. 22xxx Windows 7 和 Windows Server 2008 R2 SP1 LDR GDR 服務分支只包含針對普遍的特別重要問題所發行的通用修正程式。 LDR 服務分支除了通用修正程式之外,還包含 Hotfix。
為每個環境安裝的 MANIFEST 檔案 (.manifest) 和 MUM 檔案 (.mum) 分別列在「Windows 7 和 Windows Server 2008 R2 的其他檔案資訊」一節中。
對於維持已更新元件的狀態,MUM 及 MANIFEST 檔案及相關的安全性目錄 (.cat) 檔案都很重要。 屬性未列出的安全性目錄檔案是以 Microsoft 數位簽章簽署。
適用於所有支援的 x86 版本 Windows 7
| 檔案名稱 | 檔案版本 | 檔案大小 | 日期 | 時間 | 平台 |
|---|---|---|---|---|---|
| Nsi.dll | 6.1.7600.16385 | 8,704 | 2009 年 7 月 14 日 | 16:01 | x86 |
| Nsiproxy.sys | 6.1.7600.16385 | 16,896 | 2009 年 7 月 13 日 | 12:23 | x86 |
| Nsisvc.dll | 6.1.7601.22590 | 20,480 | 2014 年 2 月 5 日 | 02:03 | x86 |
| Winnsi.dll | 6.1.7600.16385 | 16,896 | 2009 年 7 月 14 日 | 16:01 | x86 |
適用於所有支援的 x64 版本 Windows 7 和 Windows Server 2008 R2
| 檔案名稱 | 檔案版本 | 檔案大小 | 日期 | 時間 | 平台 |
|---|---|---|---|---|---|
| Nsi.dll | 6.1.7600.16385 | 13,824 | 2009 年 7 月 14 日 | 01:41 | x64 |
| Nsiproxy.sys | 6.1.7601.22590 | 24,576 | 2014 年 2 月 5 日 | 01:15 | x64 |
| Nsisvc.dll | 6.1.7601.22590 | 26,624 | 2014 年 2 月 5 日 | 02:42 | x64 |
| Winnsi.dll | 6.1.7600.16385 | 26,112 | 2009 年 7 月 14 日 | 01:41 | x64 |
| Nsi.dll | 6.1.7601.22590 | 8,704 | 2014 年 2 月 5 日 | 02:03 | x86 |
| Winnsi.dll | 6.1.7601.22590 | 16,896 | 2014 年 2 月 5 日 | 02:04 | x86 |
適用於所有支援的 IA-64 版本 Windows Server 2008 R2
| 檔案名稱 | 檔案版本 | 檔案大小 | 日期 | 時間 | 平台 |
|---|---|---|---|---|---|
| Nsi.dll | 6.1.7600.16385 | 18,944 | 2009 年 7 月 14 日 | 01:48 | IA-64 |
| Nsiproxy.sys | 6.1.7601.22590 | 53,760 | 2014 年 2 月 5 日 | 00:50 | IA-64 |
| Nsisvc.dll | 6.1.7601.22590 | 60,928 | 2014 年 2 月 5 日 | 01:48 | IA-64 |
| Winnsi.dll | 6.1.7600.16385 | 38,912 | 2009 年 7 月 14 日 | 01:50 | IA-64 |
| Nsi.dll | 6.1.7601.22590 | 8,704 | 2014 年 2 月 5 日 | 02:03 | x86 |
| Winnsi.dll | 6.1.7601.22590 | 16,896 | 2014 年 2 月 5 日 | 02:04 | x86 |
有關 Windows 7 和 Windows Server 2008 R2 的其他檔案資訊
所有支援的 x86 版本 Windows 7 的其他檔案
| 檔案名稱 | Package_1_for_kb2847346~31bf3856ad364e35~x86~~6.1.1.0.mum |
|---|---|
| 檔案版本 | 不適用 |
| 檔案大小 | 1,822 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 06:35 |
| 平台 | 不適用 |
| 檔案名稱 | Package_2_for_kb2847346~31bf3856ad364e35~x86~~6.1.1.0.mum |
| 檔案版本 | 不適用 |
| 檔案大小 | 1,805 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 06:35 |
| 平台 | 不適用 |
| 檔案名稱 | Package_3_for_kb2847346~31bf3856ad364e35~x86~~6.1.1.0.mum |
| 檔案版本 | 不適用 |
| 檔案大小 | 1,807 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 06:35 |
| 平台 | 不適用 |
| 檔案名稱 | Package_for_kb2847346_rtm~31bf3856ad364e35~x86~~6.1.1.0.mum |
| 檔案版本 | 不適用 |
| 檔案大小 | 1,459 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 06:35 |
| 平台 | 不適用 |
| 檔案名稱 | Package_for_kb2847346_sp1~31bf3856ad364e35~x86~~6.1.1.0.mum |
| 檔案版本 | 不適用 |
| 檔案大小 | 1,819 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 06:35 |
| 平台 | 不適用 |
| 檔案名稱 | X86_dfca12963d5c03edca970b29ad513eb4_31bf3856ad364e35_6.1.7601.22590_none_ff32d7aebbbb6891.manifest |
| 檔案版本 | 不適用 |
| 檔案大小 | 699 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 06:35 |
| 平台 | 不適用 |
| 檔案名稱 | X86_microsoft-windows-usermodensi_31bf3856ad364e35_6.1.7601.22590_none_749890603f18301d.manifest |
| 檔案版本 | 不適用 |
| 檔案大小 | 8,301 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 06:38 |
| 平台 | 不適用 |
所有支援的 x64 型版本 Windows 7 和 Windows Server 2008 R2 的其他檔案
| 檔案名稱 | Amd64_37e172e525713d1718cb98daea282913_31bf3856ad364e35_6.1.7601.22590_none_9888f3a0165278fe.manifest |
|---|---|
| 檔案版本 | 不適用 |
| 檔案大小 | 1,048 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 06:35 |
| 平台 | 不適用 |
| 檔案名稱 | Amd64_3839818617f8250fd6f59e35da1df9bd_31bf3856ad364e35_6.1.7601.22590_none_8fbf427f98b0d1cb.manifest |
| 檔案版本 | 不適用 |
| 檔案大小 | 703 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 06:35 |
| 平台 | 不適用 |
| 檔案名稱 | Amd64_a9af583825031567fe0548a9c2c728ab_31bf3856ad364e35_6.1.7601.22590_none_59ced916edddc9da.manifest |
| 檔案版本 | 不適用 |
| 檔案大小 | 703 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 06:35 |
| 平台 | 不適用 |
| 檔案名稱 | Amd64_microsoft-windows-usermodensi_31bf3856ad364e35_6.1.7601.22590_none_d0b72be3f775a153.manifest |
| 檔案版本 | 不適用 |
| 檔案大小 | 8,305 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 06:41 |
| 平台 | 不適用 |
| 檔案名稱 | Package_1_for_kb2847346~31bf3856ad364e35~amd64~~6.1.1.0.mum |
| 檔案版本 | 不適用 |
| 檔案大小 | 1,832 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 06:35 |
| 平台 | 不適用 |
| 檔案名稱 | Package_2_for_kb2847346~31bf3856ad364e35~amd64~~6.1.1.0.mum |
| 檔案版本 | 不適用 |
| 檔案大小 | 2,237 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 06:35 |
| 平台 | 不適用 |
| 檔案名稱 | Package_3_for_kb2847346~31bf3856ad364e35~amd64~~6.1.1.0.mum |
| 檔案版本 | 不適用 |
| 檔案大小 | 2,015 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 06:35 |
| 平台 | 不適用 |
| 檔案名稱 | Package_4_for_kb2847346~31bf3856ad364e35~amd64~~6.1.1.0.mum |
| 檔案版本 | 不適用 |
| 檔案大小 | 2,036 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 06:35 |
| 平台 | 不適用 |
| 檔案名稱 | Package_for_kb2847346_rtm~31bf3856ad364e35~amd64~~6.1.1.0.mum |
| 檔案版本 | 不適用 |
| 檔案大小 | 1,467 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 06:35 |
| 平台 | 不適用 |
| 檔案名稱 | Package_for_kb2847346_sp1~31bf3856ad364e35~amd64~~6.1.1.0.mum |
| 檔案版本 | 不適用 |
| 檔案大小 | 2,830 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 06:35 |
| 平台 | 不適用 |
| 檔案名稱 | Wow64_microsoft-windows-usermodensi_31bf3856ad364e35_6.1.7601.22590_none_db0bd6362bd6634e.manifest |
| 檔案版本 | 不適用 |
| 檔案大小 | 4,690 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 02:16 |
| 平台 | 不適用 |
所有支援的 Windows Server 2008 R2 IA-64 版本的其他檔案
| 檔案名稱 | Ia64_44d491142723affea686ec2fba3cb4ac_31bf3856ad364e35_6.1.7601.22590_none_dc26e555dbabe437.manifest |
|---|---|
| 檔案版本 | 不適用 |
| 檔案大小 | 1,046 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 06:35 |
| 平台 | 不適用 |
| 檔案名稱 | Ia64_microsoft-windows-usermodensi_31bf3856ad364e35_6.1.7601.22590_none_749a34563f163919.manifest |
| 檔案版本 | 不適用 |
| 檔案大小 | 8,303 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 06:35 |
| 平台 | 不適用 |
| 檔案名稱 | Package_1_for_kb2847346~31bf3856ad364e35~ia64~~6.1.1.0.mum |
| 檔案版本 | 不適用 |
| 檔案大小 | 2,029 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 06:35 |
| 平台 | 不適用 |
| 檔案名稱 | Package_for_kb2847346_sp1~31bf3856ad364e35~ia64~~6.1.1.0.mum |
| 檔案版本 | 不適用 |
| 檔案大小 | 1,446 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 06:35 |
| 平台 | 不適用 |
| 檔案名稱 | Wow64_microsoft-windows-usermodensi_31bf3856ad364e35_6.1.7601.22590_none_db0bd6362bd6634e.manifest |
| 檔案版本 | 不適用 |
| 檔案大小 | 4,690 |
| 日期 (UTC) | 2014 年 2 月 5 日 |
| UTC) (時間 | 02:16 |
| 平台 | 不適用 |
因應措施
若要解決此問題,請依照您的情況,使用下列其中一種因應措施。
案例 1 的因應措施
請確定未強制停止應用程式,例如 ping.exe。 請改為讓應用程式正常關閉。
或者,升級至 Windows Server 2012。 此問題已在 Windows Server 2012 中修正。 此修正程式可防止 NSI 服務發生記憶體流失,而無論應用程式停止方式為何。
案例 2 的因應措施
軟體開發人員應該建立多個 ICMP 控制代碼來傳送 ICMP 請求。 如果必須傳送大量的ICMP封包,就應該使用RAW套接字,直接在RAW套接字上傳送和接收ICMP封包。 這將提供最快的效能。
案例 3 的因應措施
在此案例中,如果您停用並啟用網路介面卡,記憶體使用量會立即降低,但 CPU 使用量會短暫飆升。
這是因為當 IP 位址或介面發生變更時,核心會通知 NSI 服務。 然後,NSI 服務會嘗試通知所有已註冊通知的用戶端。 當服務嘗試通知不存在的用戶端程序時,RPC 會報告錯誤。 因此,NSI 服務會刪除為該用戶端程序儲存的所有狀態資訊。 發生此情況之後,該記憶體就會被釋放。
在這種情況下,會註冊數十萬個通知。 事件發生後,這些無效用戶端的所有記憶體都會被釋放。
此問題已於 Windows 8 中修正。