NSI 서비스를 실행하는 Svchost.exe 메모리 누수 및 페이징이 아닌 풀 메모리 누수 태그 NSpc

적용 대상
Windows Server 2008 R2 Service Pack 1 Windows 7

증상

Windows 7 또는 Windows Server 2008 R2에서 실행되는 애플리케이션 또는 도구가 있고 애플리케이션 또는 도구가 다음 작업 중 하나 이상을 수행한다고 가정합니다.

  • ICMP 또는 ping.exe 사용하여 다른 서버 모니터링
  • 여러 수명이 짧은 프로세스를 시작하여 작업을 수행하고 프로세스가 중지됩니다.
  • 네트워크 작업을 수행하면 프로세스가 다른 애플리케이션 또는 스크립트에 의해 중지됩니다.

이 경우 서버가 몇 시간 또는 며칠 동안 지속적으로 실행되면 NSI(네트워크 저장소 인터페이스) 서비스가 메모리를 누수하는 것을 알 수 있습니다. 또한 다음과 같은 증상이 표시됩니다.

  • 모니터링 소프트웨어를 중지하면 메모리 누수가 중지됩니다.
  • 애플리케이션을 중지한 다음 컴퓨터를 다시 시작하면 NSI 서비스에서 메모리 누수가 발생하지 않습니다.
  • 경우에 따라 네트워크 어댑터를 사용하지 않도록 설정한 다음, NSI 서비스에서 CPU 사용량이 갑자기 급증하는 것을 알 수 있습니다. 또한 메모리 사용량은 즉시 1~2GB에서 200MB 또는 300MB로 감소합니다.

이 문제는 다음 시나리오에서 발생할 수 있습니다.

시나리오 1

ping.exe 같은 애플리케이션이 강제로 중지된 경우 IcmpCloseHandle 함수 가 호출되지 않을 수 있습니다. 이 경우 NSI 서비스에서 사용 가능한 클라이언트가 있음을 감지할 수 있습니다. 따라서 서비스는 ICMP 메시지에 대한 알림을 지속적으로 보냅니다. 클라이언트가 없으므로 알림 목록이 계속 증가합니다. NSI 서비스가 중지될 때까지 목록이 정리되지 않습니다.

ping을 보내려면 ICMP 핸들을 연 다음 이러한 다른 IP 도우미 함수를 사용하여 ICMP 데이터를 보내고 받아야 합니다.

IcmpCreateFile 함수

ICMPCreateFile 함수

IcmpSendEcho2Ex 함수

애플리케이션이 ping을 보낸 후 IcmpCloseHandle 함수 를 호출하여 ICMP 핸들을 닫아야 합니다.

시나리오 2

소프트웨어 개발자는 IPHlelper API를 사용하여 ICMP 메시지를 보내고 받는 애플리케이션을 만듭니다. 여러 클라이언트에 대해 ICMP 메시지를 보내는 데 ICMP 핸들을 하나만 사용하고 이 핸들을 매우 높은 속도로 전송하는 경우 메시지가 수신될 때 알림을 받는 IPHelper API는 속도를 유지할 수 없습니다. 이 경우 NSI 서비스 메모리가 계속해서 기하급수적으로 증가하는 것을 볼 수 있습니다. 또한 NSI 서비스(nsisvc.dll)에서 높은 CPU 사용량을 확인할 수 있습니다.

시나리오 3

IP 도우미 함수를 직접 또는 간접적으로 사용하는 애플리케이션 또는 서비스가 있습니다. 애플리케이션이 중지되거나 중지되며 각 알림 등록이 취소되지 않은 경우 정상적으로 종료되지 않습니다(CancelMibChangeNotify2). 이 경우 NSI 서버는 중지된 프로세스에 대한 등록을 보류 상태로 유지합니다. 애플리케이션 중단 인스턴스가 많은 경우 NSI 서비스에는 많은 느린 등록이 있습니다. RPC 비동기 상태 및 기타 정보는 모든 등록에 대해 유지 관리됩니다. 그러면 메모리 사용량이 추가됩니다. 일반적으로 이러한 등록은 인터페이스 변경 또는 유니캐스트 IP 주소 변경에 대해 이루어집니다. 상태가 변경되지 않으면 이러한 등록은 계속 유지됩니다.

등록 프로세스 중에 사용되는 알림 함수는 다음과 같습니다.

많은 애플리케이션이 호출하지 않거나(CancelMibChangeNotify2) 프로세스를 중지하는 이유는 Microsoft 개발자 네트워크 웹 사이트의 NotifyIpInterfaceChange 함수 항목에서 설명합니다.

변경 알림을 등록하기 위해 NotifyIpInterfaceChange 함수 를 호출한 후에도 이러한 알림은 애플리케이션이 변경 알림을 받도록 등록을 취소하거나 애플리케이션이 중지될 때까지 계속 전송됩니다. 애플리케이션이 중지되면 시스템은 변경 알림에 대한 등록을 자동으로 등록 취소합니다. 변경 알림이 중지되기 전에 명시적으로 등록을 취소하도록 애플리케이션을 구성하는 것이 좋습니다.

알림에 대한 모든 등록에 대해 NSpc 태그에 대한 일부 비페이징 풀(NPP) 메모리도 할당합니다.

원인

이 문제는 알림을 등록하는 프로세스가 NSI 서비스에서 먼저 등록을 취소하지 않고 종료되기 때문에 발생합니다. 따라서 NSI의 등록 누수로 인해 NSI 서비스에서 메모리 누수가 발생합니다. 또한 NPP는 NSI 프록시 컨텍스트 태그 NSpc(NSI.dll)에서 메모리를 누수합니다.

해결 방법

핫픽스 정보

지원되는 핫픽스는 Microsoft 지원 사용할 수 있습니다. 그러나 이 핫픽스는 이 문서에서 설명하는 문제만 수정하도록 제작되었습니다. 이 문서에 설명된 문제가 발생하는 시스템에만 이 핫픽스를 적용합니다. 이핫픽스는나중에추가테스트를받아야할수도있습니다. 따라서이문제의영향이심각한경우가아니면이핫픽스가포함된다음소프트웨어업데이트가나올때까지기다리는것이좋습니다.

핫픽스를다운로드할수있는경우기술자료문서의맨위에서 "핫픽스다운로드가능"이표시됩니다. 이 절이 표시되지않으면 Microsoft 기술지원서비스에문의하여핫픽스를구합니다.

참고 문제가 추가로 발생하거나 문제 해결이 필요한 경우 별도의 서비스 요청을 해야 할 수도 있습니다. 이 특정 핫픽스로 해결할 수 없는 추가 질문과 문제에 대해서는 지원 비용이 청구됩니다. Microsoft 고객 서비스 및 지원 전화 번호의 전체 목록을 확인하거나 별도의 서비스 요청을 만들려면 다음 Microsoft 웹 사이트로 이동하세요.

http://support.microsoft.com/contactus/?ws=support

참고 "핫픽스 다운로드 사용 가능" 양식은 핫픽스에서 사용 가능한 언어를 표시합니다. 사용자 언어가 표시되지 않는것은 해당 언어의 핫픽스를 사용할 수 없기 때문입니다.

필수 구성 요소

이 핫픽스를 적용하려면 Windows 7용 서비스 팩 1 또는 Windows Server 2008 R2가 설치되어 있어야 합니다.

다시 시작 요구 사항

이 핫픽스를 적용한 후에는 컴퓨터를 다시 시작해야 합니다.

핫픽스 대체 정보

이 핫픽스는 이전에 릴리스된 핫픽스를 대체하지 않습니다.

파일 정보

이 핫픽스의 영어(미국) 버전은 다음 표에 나열된 특성이 있는 파일을 설치합니다. 해당 파일의 날짜와 시간은 UTC(협정 세계시)로 표시됩니다. 로컬 컴퓨터의 경우 파일의 날짜와 시간이 현지 시간으로 표시되며 현재의 DST(일광 절약 시간) 시차가 유지됩니다. 또한 이러한 날짜와 시간은 파일에 대해 특정 작업을 수행할 경우 변경될 수 있습니다.

Windows 7 및 Windows Server 2008 R2 파일 정보 및 노트

중요 Windows 7 핫픽스 및 Windows Server 2008 R2 핫픽스는 동일한 패키지에 포함되어 있습니다. 그러나 핫픽스 요청 페이지의 핫픽스는 두 운영 체제 아래에 표시됩니다. 한가지또는두가지운영체제모두에적용되는핫픽스패키지를요청하려면페이지의 "Windows 7/Windows Server 2008 R2" 아래에나열된핫픽스를선택하십시오. 각 핫픽스가 적용되는 실제 운영 체제를 확인하려면 문서의 "적용 대상" 절을 참조하십시오.

  • 특정 제품, SR_Level (RTM, SPn) 및 서비스 분기(LDR, GDR)에 적용되는 파일은 다음 표에 나오는 것처럼 파일 버전 번호를 검토하여 확인할 수 있습니다.

    버전 제품 SR_Level Service branch
    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 서비스 분기에는 널리 배포되는 픽스 외에 핫픽스도 포함되어 있습니다.

  • 각 환경에 대해 설치된 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 14-Jul-2009 16:01 x86
Nsiproxy.sys 6.1.7600.16385 16,896 13-Jul-2009 23:12 x86
Nsisvc.dll 6.1.7601.22590 20,480 2014년 2월 5일 02:03 x86
Winnsi.dll 6.1.7600.16385 16,896 14-Jul-2009 16:01 x86

지원되는 모든 x64 기반 버전의 Windows 7 및 Windows Server 2008 R2

파일 이름 파일 버전 파일 크기 날짜 시간 플랫폼
Nsi.dll 6.1.7600.16385 13,824 14-Jul-2009 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일 오후 6: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 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 14-Jul-2009 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 14-Jul-2009 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_ff32d7aebb6891.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) 보고 16:02
플랫폼 해당 없음

지원되는모든 IA-64 기반버전의 Windows Server 2008 R2에대한추가파일

파일 이름 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) 보고 16:02
플랫폼 해당 없음

해결 방법

이 문제를 해결하려면 상황에 맞게 다음 해결 방법 중 하나를 사용합니다.

시나리오 1에 대한 해결 방법

ping.exe 같은 애플리케이션이 강제로 중지되지 않았는지 확인합니다. 대신 애플리케이션을 정상적으로 종료합니다.

또는 Windows Server 2012 업그레이드합니다. 이 문제는 Windows Server 2012 해결되었습니다. 이 수정은 애플리케이션이 중지되는 방법에 관계없이 NSI 서비스가 메모리 누수를 방지합니다.

시나리오 2에 대한 해결 방법

소프트웨어 개발자는 ICMP 요청을 보내려면 여러 ICMP 핸들을 만들어야 합니다. 많은 수의 ICMP 패킷을 보내야 하는 경우 원시 소켓을 사용하고 RAW 소켓에서 ICMP 패킷을 직접 보내고 받아야 합니다. 이렇게 하면 성능이 가장 빠릅니다.

시나리오 3에 대한 해결 방법

이 시나리오에서 네트워크 어댑터를 사용하지 않도록 설정하고 사용하도록 설정하면 메모리 사용량이 즉시 감소하지만 CPU 사용량이 짧아질 수 있습니다.

이는 IP 주소 또는 인터페이스에서 변경이 발생하면 NSI 서비스가 커널에 의해 알림을 받기 때문에 발생합니다. 그런 다음 NSI 서비스는 알림에 등록된 모든 클라이언트를 표시하려고 시도합니다. 서비스가 존재하지 않는 클라이언트 프로세스에 알리려고 하면 RPC에서 오류를 보고합니다. 따라서 NSI 서비스는 해당 클라이언트 프로세스에 대해 저장된 모든 상태 정보를 삭제합니다. 이 경우 해당 메모리가 해제됩니다.

이 경우 수십만 개의 알림이 등록됩니다. 이벤트가 발생한 후 이러한 잘못된 클라이언트에 대한 모든 메모리가 해제됩니다.

이 문제는 Windows 8 해결되었습니다.