Objawy
Załóżmy, że aplikacji lub narzędzie, które działa w systemie Windows 7 lub Windows Server 2008 R2, i że aplikacji lub narzędzia wykonuje jedną lub więcej z następujących czynności:
-
Monitorowanie innego serwera przy użyciu protokołu ICMP lub ping.exe
-
Uruchamianie wielu procesów krótkotrwałe do wykonywania pracy i proces zostaje zatrzymana
-
Robi operacje sieciowe, a proces jest następnie zatrzymane przez inną aplikację lub skrypt
W tej sytuacji, po tym serwer działa w sposób ciągły przez kilka godzin lub kilka dni, można zauważyć, że Usługa interfejsu magazynu sieciowego (NSI) występuje przeciek pamięci. Ponadto można zauważyć następujące symptomy:
-
Jeśli zatrzymasz oprogramowanie monitorujące zatrzymuje przeciek pamięci.
-
Jeśli Zatrzymaj aplikację, a następnie uruchom ponownie komputer, nie przeciek pamięci w usłudze NSI.
-
W niektórych przypadkach jeśli wyłączyć i włączyć kartę sieciową, można zauważyć nagły skok użycie Procesora przez usługę NSI. Ponadto użycie pamięci natychmiast pochodzi kropli 1 lub 2 gigabajty (GB) do 200 lub 300 megabajtów (MB).
Ten problem może wystąpić w dowolnym z poniższych scenariuszy.
Scenariusz 1
W przypadku aplikacji, takiej jak ping.exe przymusowo zatrzymane, jest możliwe, że nie jest wywoływana Funkcja IcmpCloseHandle . W takim przypadku usługi NSI może wykryć, że jest klientem. W związku z tym usługa stale Wyślij powiadomienia o wszelkich komunikatów ICMP. Ponieważ klient nie istnieje, na liście powiadamiania stale rośnie. Listy nie są czyszczone aż NSI zostanie zatrzymana.
Aby wysłać ping, musisz otworzyć dojścia protokołu ICMP, a następnie użyć tych funkcji pomocnika IP do wysyłania i odbierania danych protokołu ICMP:
Po aplikacji wysyła polecenie ping, wywołaj funkcję IcmpCloseHandle zamknąć dojście protokołu ICMP.
Scenariusz 2
Programista tworzy aplikację do wysyłania i odbierania komunikatów ICMP przy użyciu interfejsów API IPHlelper. Jeśli tylko jeden uchwyt ICMP służy do wysyłania komunikatów ICMP dla wielu klientów, a jeśli tak, to robi to z bardzo dużą szybkością, interfejs API IPHelper, który jest powiadamiany, gdy wiadomość zostanie odebrana nie może utrzymać prędkość. W takim przypadku można zauważyć, że pamięci usługi NSI nadal gwałtownie rośnie. Ponadto można zauważyć wysokie użycie Procesora przez usługę NSI (nsisvc.dll).
Scenariusz 3
Masz aplikacja lub usługa, która bezpośrednio lub pośrednio używa funkcji pomocnika IP. Aplikacja przestaje lub jest zatrzymana, a to nie przy każdej rejestracji powiadomienie nie jest anulowane (CancelMibChangeNotify2). W tym przypadku serwer NSI trzyma rejestracji czasu dla procesu, który jest zatrzymana. Jeśli istnieje wiele wystąpień zablokowanie aplikacji, usługi NSI ma wielu pokutujących rejestracji. Dla każdej rejestracji jest utrzymywana stanie async RPC i inne informacje. Spowoduje to dodanie do użycia pamięci. Zazwyczaj te rejestracje są wykonane zmianę interfejsu lub zmiana adresu IP emisji pojedynczej. Jeśli nie ma żadnej zmiany w Państwie, te rejestracje są nadal obsługiwane.
Następujące funkcje powiadomień są używane podczas procesu rejestracji:
Przyczyny, że wiele aplikacji nie wywołać (CancelMibChangeNotify2) lub zatrzymać proces omówiono w temacie Funkcja NotifyIpInterfaceChange w witrynie sieci Web Microsoft Developer Network.
Po zarejestrować powiadomienia o zmianie zostanie wywołana Funkcja NotifyIpInterfaceChange , te notyfikacje w dalszym ciągu można wysyłać, dopóki aplikacja wyrejestrowuje do otrzymywania powiadomień o zmianach lub zatrzymywaniu aplikacji. Jeśli aplikacja przestanie działać, system automatycznie wyrejestrowuje każdej rejestracji dla powiadomień o zmianach. Firma Microsoft zaleca, aby skonfigurować aplikacje jawnie wyrejestrować powiadomień o zmianach przed zatrzymaniem.
Dla każdej rejestracji dla powiadomienie o wprowadzeniu także przydzielić trochę pamięci puli niestronicowanej (NPP) dlaNSpc tag.
Przyczyna
Ten problem występuje, ponieważ proces, który rejestruje powiadomienie kończy działanie bez pierwszego Wyrejestrowanie z usługi NSI. W związku z tym przeciek rejestracji w NSI powoduje przeciek pamięci w usłudze NSI. Dodatkowo, NPP przeciek pamięci w NSpc Tag kontekstów NSI Proxy (NSI.dll).
Rozwiązanie
Informacje o poprawce
Obsługiwana poprawka dostępna jest z witryny Microsoft Support. Jednak ta poprawka jest przeznaczona tylko do usunięcia problemu opisanego w tym artykule. Zastosuj poprawkę tylko w systemach, w których występuje problem opisany w tym artykule. Ta poprawka może być wciąż w fazie testowania. Jeśli dany system nie jest poważnie narażony na ten problem, firma Microsoft zaleca, aby poczekać na następną aktualizację oprogramowania zawierającą tę poprawkę.
Jeśli poprawka jest dostępna do pobrania, pojawi się sekcja "Poprawka dostępna do pobrania" na początku tego artykułu z bazy wiedzy Knowledge Base. Jeśli nie ma tej sekcji, skontaktuj się z Obsługą i Wsparciem Klienta Microsoft w celu uzyskania poprawki.
Uwaga Jeśli wystąpią dodatkowe błędy lub konieczność rozwiązania problemu, być może trzeba będzie utworzyć osobne zlecenie usługi. Zwykłe koszty obsługi będą zastosowane do dodatkowych pytań i problemów, których nie można rozwiązać przy użyciu określonej poprawki. Aby uzyskać pełną listę numerów telefonów pomocy technicznej i obsługi klienta firmy Microsoft lub utworzyć osobne zlecenie usługi, odwiedź następujące witryny firmy Microsoft znajdują się:
http://support.microsoft.com/contactus/?ws=support
Uwaga "Poprawka dostępna do pobrania" zawiera listę języków, dla których dostępna jest poprawka. Jeśli odpowiedni język nie jest widoczny, to dlatego, że poprawka nie jest dostępna dla danego języka.
Wymagania wstępne
Aby zastosować tę poprawkę, musi mieć dodatek Service Pack 1 dla systemu Windows 7 lub Windows Server 2008 R2 zainstalowany.
Wymagania dotyczące ponownego uruchomienia
Po zastosowaniu tej poprawki należy ponownie uruchomić komputer.
Informacje dotyczące zastępowania poprawek
Ta poprawka nie zastępuje żadnych wcześniej wydanych poprawek.
Informacje dotyczące pliku
Wersja angielskojęzyczna (Stany Zjednoczone) tej poprawki instaluje pliki, których atrybuty wymieniono w poniższych tabelach. Daty i godziny odpowiadające tym plikom są podane w formacie uniwersalnego czasu koordynowanego (UTC, Coordinated Universal Time). Daty i godziny odpowiadające tym plikom na komputerze lokalnym są wyświetlane w formacie czasu lokalnego, wraz z Twoim bieżącym bias czasu letniego (DST). Dodatkowo, daty mogą ulec zmianie podczas wykonywania pewnych operacji na plikach.
Informacje o plikach systemu Windows 7 i Windows Server 2008 R2 i notatki
Ważne Poprawki systemu Windows 7 i Windows Server 2008 R2 są zawarte w tych samych opakowaniach. Jednak poprawki na stronie żądanie poprawki są wymienione w obu systemach operacyjnych. Aby zażądać pakietu poprawek, który dotyczy jednej lub obu systemów operacyjnych, wybierz poprawkę, która jest wyświetlana w obszarze "Windows 7/Windows Server 2008 R2" na stronie. Zawsze sprawdzaj w sekcji „Stosuje się do”, do jakiego systemu operacyjnego dotyczy każda z poprawek.
-
Pliki, które dotyczą określonego produktu, poziomu SR (RTM, SPn) i składnika usługi (LDR, GDR) można zidentyfikować przez sprawdzenie wersji pliku, jak pokazano w poniższej tabeli:
Wersja
Produkt
SR_Level
Składnik usługi
6.1.760 0. 16xxx
Windows 7 i Windows Server 2008 R2
RTM
GDR
6.1.760 1. 22xxx
Windows 7 i Windows Server 2008 R2
SP1
LDR
-
Składniki usługi GDR zawierają tylko te poprawki, które są szeroko rozpowszechnione, dotyczą niezwykle ważnych problemów. Składniki usługi LDR zawierają też inne poprawki, a nie tylko publicznie rozpowszechniane poprawki.
-
Pliki MANIFESTU (manifest) i pliki MUM (mum) instalowane są dla każdego środowiska są wymienione osobno w sekcji "Informacje o dodatkowych plikach dla systemów Windows 7 i Windows Server 2008 R2".
-
Pliki MUM i pliki MANIFESTU oraz skojarzone pliki z wykazu zabezpieczeń (.cat), są bardzo ważne, aby utrzymać stan zaktualizowanych składników. Pliki katalogu zabezpieczeń, których atrybuty nie zostały wymienione, są podpisane za pomocą podpisu cyfrowego firmy Microsoft.
Wszystkie obsługiwane wersje systemu Windows 7 x86
Nazwa pliku |
Wersja pliku |
Rozmiar pliku |
Data |
Godzina |
Platforma |
Nsi.dll |
6.1.7600.16385 |
8,704 |
14-Jul-2009 |
01:16 |
x86 |
Nsiproxy.sys |
6.1.7600.16385 |
16,896 |
13-Jul-2009 |
23:12 |
x86 |
Nsisvc.dll |
6.1.7601.22590 |
20480 |
05-Feb-2014 |
02:03 |
x86 |
Winnsi.dll |
6.1.7600.16385 |
16,896 |
14-Jul-2009 |
01:16 |
x86 |
Wszystkie obsługiwane wersje systemów Windows 7 i Windows Server 2008 R2 z procesorami x64
Nazwa pliku |
Wersja pliku |
Rozmiar pliku |
Data |
Godzina |
Platforma |
Nsi.dll |
6.1.7600.16385 |
13,824 |
14-Jul-2009 |
01:41 |
x64 |
Nsiproxy.sys |
6.1.7601.22590 |
24576 |
05-Feb-2014 |
01:15 |
x64 |
Nsisvc.dll |
6.1.7601.22590 |
26,624 |
05-Feb-2014 |
02:42 |
x64 |
Winnsi.dll |
6.1.7600.16385 |
26,112 |
14-Jul-2009 |
01:41 |
x64 |
Nsi.dll |
6.1.7601.22590 |
8,704 |
05-Feb-2014 |
02:03 |
x86 |
Winnsi.dll |
6.1.7601.22590 |
16,896 |
05-Feb-2014 |
02:04 |
x86 |
Dla wszystkich obsługiwanych wersji systemu Windows Server 2008 R2 z procesorami IA-64
Nazwa pliku |
Wersja pliku |
Rozmiar pliku |
Data |
Godzina |
Platforma |
Nsi.dll |
6.1.7600.16385 |
18,944 |
14-Jul-2009 |
01:48 |
IA-64 |
Nsiproxy.sys |
6.1.7601.22590 |
53,760 |
05-Feb-2014 |
00:50 |
IA-64 |
Nsisvc.dll |
6.1.7601.22590 |
60,928 |
05-Feb-2014 |
01:48 |
IA-64 |
Winnsi.dll |
6.1.7600.16385 |
38,912 |
14-Jul-2009 |
01:50 |
IA-64 |
Nsi.dll |
6.1.7601.22590 |
8,704 |
05-Feb-2014 |
02:03 |
x86 |
Winnsi.dll |
6.1.7601.22590 |
16,896 |
05-Feb-2014 |
02:04 |
x86 |
Informacje o dodatkowych plikach dla systemu Windows 7 i Windows Server 2008 R2
Dodatkowe pliki dla wszystkich obsługiwanych wersji systemu Windows 7 z procesorami x86
Nazwa pliku |
Package_1_for_kb2847346~31bf3856ad364e35~x86~~6.1.1.0.mum |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
1 822 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
06:35 |
Platforma |
Nie dotyczy |
Nazwa pliku |
Package_2_for_kb2847346~31bf3856ad364e35~x86~~6.1.1.0.mum |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
1,805 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
06:35 |
Platforma |
Nie dotyczy |
Nazwa pliku |
Package_3_for_kb2847346~31bf3856ad364e35~x86~~6.1.1.0.mum |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
1 807 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
06:35 |
Platforma |
Nie dotyczy |
Nazwa pliku |
Package_for_kb2847346_rtm~31bf3856ad364e35~x86~~6.1.1.0.mum |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
1 459 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
06:35 |
Platforma |
Nie dotyczy |
Nazwa pliku |
Package_for_kb2847346_sp1~31bf3856ad364e35~x86~~6.1.1.0.mum |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
1 918 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
06:35 |
Platforma |
Nie dotyczy |
Nazwa pliku |
X86_dfca12963d5c03edca970b29ad513eb4_31bf3856ad364e35_6.1.7601.22590_none_ff32d7aebbbb6891.manifest |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
699 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
06:35 |
Platforma |
Nie dotyczy |
Nazwa pliku |
X86_microsoft-windows-usermodensi_31bf3856ad364e35_6.1.7601.22590_none_749890603f18301d.manifest |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
8,301 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
06:38 |
Platforma |
Nie dotyczy |
Dodatkowe pliki dla wszystkich obsługiwanych wersji systemów Windows 7 i Windows Server 2008 R2 z procesorami x 64
Nazwa pliku |
Amd64_37e172e525713d1718cb98daea282913_31bf3856ad364e35_6.1.7601.22590_none_9888f3a0165278fe.manifest |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
1 048 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
06:35 |
Platforma |
Nie dotyczy |
Nazwa pliku |
Amd64_3839818617f8250fd6f59e35da1df9bd_31bf3856ad364e35_6.1.7601.22590_none_8fbf427f98b0d1cb.manifest |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
703 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
06:35 |
Platforma |
Nie dotyczy |
Nazwa pliku |
Amd64_a9af583825031567fe0548a9c2c728ab_31bf3856ad364e35_6.1.7601.22590_none_59ced916edddc9da.manifest |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
703 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
06:35 |
Platforma |
Nie dotyczy |
Nazwa pliku |
Amd64_microsoft-windows-usermodensi_31bf3856ad364e35_6.1.7601.22590_none_d0b72be3f775a153.manifest |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
8,305 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
06:41 |
Platforma |
Nie dotyczy |
Nazwa pliku |
Package_1_for_kb2847346~31bf3856ad364e35~amd64~~6.1.1.0.mum |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
1,832 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
06:35 |
Platforma |
Nie dotyczy |
Nazwa pliku |
Package_2_for_kb2847346~31bf3856ad364e35~amd64~~6.1.1.0.mum |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
2 237 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
06:35 |
Platforma |
Nie dotyczy |
Nazwa pliku |
Package_3_for_kb2847346~31bf3856ad364e35~amd64~~6.1.1.0.mum |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
2 015 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
06:35 |
Platforma |
Nie dotyczy |
Nazwa pliku |
Package_4_for_kb2847346~31bf3856ad364e35~amd64~~6.1.1.0.mum |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
2,036 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
06:35 |
Platforma |
Nie dotyczy |
Nazwa pliku |
Package_for_kb2847346_rtm~31bf3856ad364e35~amd64~~6.1.1.0.mum |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
1 467 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
06:35 |
Platforma |
Nie dotyczy |
Nazwa pliku |
Package_for_kb2847346_sp1~31bf3856ad364e35~amd64~~6.1.1.0.mum |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
2,830 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
06:35 |
Platforma |
Nie dotyczy |
Nazwa pliku |
Wow64_microsoft-windows-usermodensi_31bf3856ad364e35_6.1.7601.22590_none_db0bd6362bd6634e.manifest |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
4,690 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
02:16 |
Platforma |
Nie dotyczy |
Dodatkowe pliki dla wszystkich obsługiwanych wersji systemu Windows Server 2008 R2 z procesorami IA-64
Nazwa pliku |
Ia64_44d491142723affea686ec2fba3cb4ac_31bf3856ad364e35_6.1.7601.22590_none_dc26e555dbabe437.manifest |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
1 046 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
06:35 |
Platforma |
Nie dotyczy |
Nazwa pliku |
Ia64_microsoft-windows-usermodensi_31bf3856ad364e35_6.1.7601.22590_none_749a34563f163919.manifest |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
8,303 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
06:35 |
Platforma |
Nie dotyczy |
Nazwa pliku |
Package_1_for_kb2847346~31bf3856ad364e35~ia64~~6.1.1.0.mum |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
2 029 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
06:35 |
Platforma |
Nie dotyczy |
Nazwa pliku |
Package_for_kb2847346_sp1~31bf3856ad364e35~ia64~~6.1.1.0.mum |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
1,446 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
06:35 |
Platforma |
Nie dotyczy |
Nazwa pliku |
Wow64_microsoft-windows-usermodensi_31bf3856ad364e35_6.1.7601.22590_none_db0bd6362bd6634e.manifest |
Wersja pliku |
Nie dotyczy |
Rozmiar pliku |
4,690 |
Data (UTC) |
05-Feb-2014 |
Godzina (UTC) |
02:16 |
Platforma |
Nie dotyczy |
Obejście
Aby obejść ten problem, należy użyć jednej z poniższych obejść odpowiednie dla danej sytuacji.
Obejście problemu dla scenariusza 1
Upewnij się, że aplikacji, na przykład ping.exe, nie jest bezprawnie zatrzymane. Zamiast tego, niech poprawnego działania aplikacji zamknięcia.
Alternatywnie uaktualnienie do systemu Windows Server 2012. Ten problem został rozwiązany w systemie Windows Server 2012. Ta poprawka zapobiega usługi NSI wyciek pamięci, niezależnie od tego, w jaki sposób zatrzymać aplikacji.
Obejście problemu dla scenariusza 2
Deweloper oprogramowania powinien utworzyć wielu dojść ICMP do wysyłania żądań protokołu ICMP. Jeśli trzeba wysłać dużą liczbę pakietów ICMP, należy używać gniazd surowych i bezpośrednio wysyłania i odbierania pakietów ICMP przez SUROWE gniazda. Daje to największą wydajność.
Obejście problemu dla scenariusza 3
W tym scenariuszu wyłączenie i włączenie karty sieciowej, użycie pamięci natychmiast zmniejsza się, ale ma krótki kolekcji użycia Procesora.
Dzieje się tak, ponieważ gdy nastąpi zmiana adresu IP lub interfejsu, usługi NSI jest powiadamiany przez jądro. Usługi NSI próbuje następnie powiadomić wszystkich klientów, które są zarejestrowane dla powiadomienia. Gdy usługa próbuje informuj procesu klienta, który nie istnieje, usługi RPC zgłasza błąd. W związku z tym usługi NSI usuwa wszystkie informacje o stanie został zapisany za ten proces klienta. Po zakończeniu tego procesu, że pamięć jest zwolniona.
W takim przypadku zarejestrowanych kilka tysięcy zgłoszeń. Po wystąpieniu zdarzenia, wszystkie pamięci dla tych klientów nieprawidłowy jest zwalniana.
Ten problem został rozwiązany w systemie Windows 8.