Symptômes
Supposons que vous ayez une application ou un outil en cours d’exécution dans Windows 7 ou Windows Server 2008 R2 et que l’application ou l’outil effectue une ou plusieurs des tâches suivantes :
- Surveillance d’un autre serveur à l’aide d’ICMP ou de ping.exe
- Démarrage de plusieurs processus de courte durée pour effectuer un travail, qui est alors arrêté
- Toute activité réseau est alors arrêtée par une autre application ou un autre script
Dans ce cas, après que votre serveur a été exécuté en continu pendant plusieurs heures ou plusieurs jours, vous remarquez que le service NSI (Network Store Interface) présente une fuite de mémoire. En outre, vous remarquez les symptômes suivants :
- Si vous arrêtez le logiciel de surveillance, la fuite de mémoire s’arrête.
- Si vous arrêtez l’application, puis redémarrez l’ordinateur, aucune fuite de mémoire ne se produit dans le service NSI.
- Dans certains cas, si vous désactivez puis activez la carte réseau, vous remarquez un pic soudain d’utilisation du processeur par le service NSI. En outre, l’utilisation de la mémoire passe immédiatement de 1 ou 2 gigaoctets (Go) à 200 ou 300 mégaoctets (Mo).
Ce problème peut se produire dans l’un des scénarios suivants.
Scénario 1
Si une application telle que ping.exe est arrêtée de force, il est possible que la fonction IcmpCloseHandle ne soit pas appelée. Dans ce cas, le service NSI peut détecter qu’un client est disponible. Par conséquent, le service envoie continuellement des notifications relatives aux messages ICMP. Étant donné que le client n’existe pas, la liste des notifications continue de s’allonger. La liste n’est nettoyée qu’une fois que le service NSI est arrêté.
Pour envoyer un ping, vous devez ouvrir le handle ICMP, puis utiliser ces autres fonctions IP Helper pour envoyer et recevoir des données ICMP :
Une fois que l’application a envoyé le ping, elle doit appeler la fonction IcmpCloseHandle pour fermer le handle ICMP.
Scénario 2
Un développeur de logiciels crée une application pour envoyer et recevoir des messages ICMP à l’aide des API IPHlelper. Si un seul handle ICMP est utilisé pour envoyer des messages ICMP à plusieurs clients, et s’il le fait à un débit très élevé, l’API IPHelper qui est notifiée lors de la réception d’un message ne peut pas maintenir la vitesse. Dans ce cas, vous remarquez que la mémoire du service NSI continue de croître de façon exponentielle. En outre, vous remarquez une utilisation élevée du processeur par le service NSI (nsisvc.dll).
Scénario 3
Vous disposez d’une application ou d’un service qui utilise directement ou indirectement les fonctions IP Helper. L’application s’arrête ou est arrêtée, et elle ne se ferme pas correctement lorsque chaque inscription de notification n’est pas annulée (CancelMibChangeNotify2). Dans ce cas, le serveur NSI maintient l’inscription en attente pour le processus arrêté. S’il y a de nombreux cas d’arrêt de l’application, le service NSI aura de nombreux enregistrements en attente. Un état asynchrone RPC et d’autres informations sont conservées pour chaque inscription. Cela augmente l’utilisation de la mémoire. En règle générale, ces inscriptions sont effectuées pour un changement d’interface ou un changement d’adresse IP de monodiffusion. S’il n’y a pas de changement dans l’État, ces enregistrements sont toujours maintenus.
Les fonctions de notification suivantes sont utilisées pendant le processus d’inscription :
- NotifyAddrChange
- NotifyIpInterfaceChange
- NotifyRouteChange
- NotifyRouteChange2
- NotifyUnicastIpAddressChange
La raison pour laquelle de nombreuses applications n’appellent pas (CancelMibChangeNotify2) ou n’arrêtent pas le processus est décrite dans la rubrique de la fonction NotifyIpInterfaceChange sur le site web Microsoft Developer Network.
Une fois que la fonction NotifyIpInterfaceChange est appelée pour s’inscrire aux notifications de modification, ces notifications continuent d’être envoyées jusqu’à ce que l’application se désinscrive pour recevoir des notifications de modification ou que l’application s’arrête. Si l’application s’arrête, le système désinscrit automatiquement toute inscription pour les notifications de modification. Nous vous recommandons de configurer une application pour qu’elle se désinscrive explicitement aux notifications de modification avant de s’arrêter.
Pour chaque inscription à la notification, vous devez également allouer de la mémoire de pool non paginé (NPP) pour la balise NSpc.
Cause
Ce problème se produit, car le processus d’inscription pour notification se ferme sans désinscription préalable du service NSI. Par conséquent, la fuite d’enregistrement dans NSI provoque la fuite de mémoire dans le service NSI. De plus, NPP fuit de la mémoire dans la balise de contextes proxy NSI NSpc (NSI.dll).
Résolution
Informations sur le correctif logiciel
Un correctif logiciel pris en charge est disponible auprès du Support Microsoft. Toutefois, il est conçu uniquement pour corriger le problème décrit dans cet article. N'appliquez ce correctif qu'aux systèmes sur lesquels vous constatez le problème décrit dans le présent article. Ce correctif logiciel va peut-être subir des tests supplémentaires. Ainsi, si vous n'êtes pas sérieusement concerné par ce problème, il est recommandé d'attendre la prochaine mise à jour logicielle qui contiendra ce correctif.
Si le correctif logiciel est disponible en téléchargement, une section « Téléchargement de correctif logiciel disponible » figure en haut du présent article de la Base de connaissances. Si cette section est absente, procurez-vous le correctif logiciel auprès des services de Support technique Microsoft.
Remarque Si des problèmes supplémentaires surviennent ou si des procédures de dépannage sont nécessaires, vous devrez peut-être créer une demande de service distincte. Les coûts habituels du support s'appliqueront aux autres questions et problèmes du support non directement liés au correctif logiciel en question. Pour obtenir la liste complète des numéros de téléphone des services d’assistance technique Microsoft ou pour créer une demande de service distincte, reportez-vous au site web de Microsoft à l’adresse suivante :
http://support.microsoft.com/contactus/?ws=support
Remarque Le formulaire « Téléchargement de correctif logiciel disponible » affiche les langues pour lesquelles le correctif logiciel est disponible. Si votre langue n'est pas répertoriée, cela signifie qu'aucun correctif logiciel n'est disponible pour cette langue.
Configuration requise
Pour appliquer ce correctif logiciel, vous devez avoir installé le Service Pack 1 pour Windows 7 ou Windows Server 2008 R2.
Nécessité de redémarrer
Vous devez redémarrer l'ordinateur après l'application de ce correctif logiciel.
Informations sur le remplacement des correctifs logiciels
Ce correctif logiciel ne remplace aucun correctif logiciel déjà publié.
Informations de fichier
La version anglaise (États-Unis) de ce correctif logiciel installe des fichiers dont les attributs sont répertoriés dans les tableaux ci-dessous. Les date et heure de création de ces fichiers sont exprimées en temps universel coordonné (UTC). Les date et heure de ces fichiers s’affichent sur votre ordinateur local conformément à l’heure locale et en tenant compte de l’heure d’été. En outre, ces date et heure peuvent changer lorsque vous effectuez certaines opérations sur les fichiers.
Informations et remarques sur les fichiers Windows 7 et Windows Server 2008 R2
D'importants correctifs pour Windows 7 et Windows Server 2008 R2 sont contenus dans les mêmes packages. Toutefois, les correctifs de la page Demande de correctifs sont répertoriées pour les deux systèmes d'exploitation. Pour demander le package de correctifs logiciels qui s'applique à l'un des systèmes d'exploitation ou aux deux, sélectionnez le correctif logiciel répertorié sous Windows 7/Windows Server 2008 R2 sur la page. Reportez-vous systématiquement à la liste des produits concernés pour déterminer le système d'exploitation auquel les différents correctifs logiciels s'appliquent.
Vous pouvez identifier les fichiers qui s'appliquent à un produit spécifique, SR_Level (RTM, SPn) et à un dossier (LDR, GDR) en examinant les numéros de version des fichiers tels qu'ils apparaissent dans le tableau suivant.
Version en cours Produit SR_Level Service branch 6.1.760 0. 16xxx Windows 7 et Windows Server 2008 R2 RTM GDR 6.1.760 1. 22xxx Windows 7 et Windows Server 2008 R2 SP1 LDR Les dossiers GDR ne contiennent que les correctifs généralement publiés pour résoudre les problèmes courants extrêmement importants. Les dossiers LDR contiennent des correctifs logiciels en plus des correctifs largement publiés.
Les fichiers MANIFEST (.manifest) et MUM (.mum) qui sont installés pour chaque environnement sont répertoriés séparément dans la section « Informations sur les fichiers supplémentaires pour Windows 7 et Windows Server 2008 R2 ».
Les fichiers MUM et MANIFEST, ainsi que les fichiers du catalogue de sécurité associés (.cat), sont extrêmement importants pour conserver l'état des composants mis à jour. Les fichiers du catalogue de sécurité pour lesquels les attributs ne sont pas répertoriés sont dotés d’une signature numérique Microsoft.
Pour toutes les versions x86 prises en charge de Windows 7
| Nom de fichier | Version de fichier | Taille du fichier | Date | Heure | Plateforme |
|---|---|---|---|---|---|
| Nsi.dll | 6.1.7600.16385 | 8,704 | 14-Juil-2009 | 01:16 | x86 |
| Nsiproxy.sys | 6.1.7600.16385 | 16 896 | 13-Juil-2009 | 12:23 | x86 |
| Nsisvc.dll | 6.1.7601.22590 | 20,480 | 05-févr-2014 | 02:03 | x86 |
| Winnsi.dll | 6.1.7600.16385 | 16 896 | 14-Juil-2009 | 01:16 | x86 |
Pour toutes les versions x64 prises en charge de Windows 7 et Windows Server 2008 R2
| Nom de fichier | Version de fichier | Taille du fichier | Date | Heure | Plateforme |
|---|---|---|---|---|---|
| Nsi.dll | 6.1.7600.16385 | 13 824 | 14-Juil-2009 | 01:41 | x64 |
| Nsiproxy.sys | 6.1.7601.22590 | 24 576 | 05-févr-2014 | 1,501 | x64 |
| Nsisvc.dll | 6.1.7601.22590 | 26,624 | 05-févr-2014 | 18:02:42 PM | x64 |
| Winnsi.dll | 6.1.7600.16385 | 26,112 | 14-Juil-2009 | 01:41 | x64 |
| Nsi.dll | 6.1.7601.22590 | 8,704 | 05-févr-2014 | 02:03 | x86 |
| Winnsi.dll | 6.1.7601.22590 | 16 896 | 05-févr-2014 | 02:04 | x86 |
Pour toutes les versions IA-64 prises en charge de Windows Server 2008 R2
| Nom de fichier | Version de fichier | Taille du fichier | Date | Heure | Plateforme |
|---|---|---|---|---|---|
| Nsi.dll | 6.1.7600.16385 | 18,944 | 14-Juil-2009 | 01:48 | IA-64 |
| Nsiproxy.sys | 6.1.7601.22590 | 53 760 | 05-févr-2014 | 00:50 | IA-64 |
| Nsisvc.dll | 6.1.7601.22590 | 60 928 | 05-févr-2014 | 01:48 | IA-64 |
| Winnsi.dll | 6.1.7600.16385 | 38,912 | 14-Juil-2009 | 01:50 | IA-64 |
| Nsi.dll | 6.1.7601.22590 | 8,704 | 05-févr-2014 | 02:03 | x86 |
| Winnsi.dll | 6.1.7601.22590 | 16 896 | 05-févr-2014 | 02:04 | x86 |
Informations sur les fichiers supplémentaires pour Windows 7 et Windows Server 2008 R2
Fichiers supplémentaires pour toutes les versions x86 prises en charge de Windows 7
| Nom de fichier | Package_1_for_kb2847346~31bf3856ad364e35~x86~~6.1.1.0.mum |
|---|---|
| Version de fichier | Non applicable |
| Taille du fichier | 1,822 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 06:35 |
| Plateforme | Non applicable |
| Nom de fichier | Package_2_for_kb2847346~31bf3856ad364e35~x86~~6.1.1.0.mum |
| Version de fichier | Non applicable |
| Taille du fichier | 1,805 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 06:35 |
| Plateforme | Non applicable |
| Nom de fichier | Package_3_for_kb2847346~31bf3856ad364e35~x86~~6.1.1.0.mum |
| Version de fichier | Non applicable |
| Taille du fichier | 1,807 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 06:35 |
| Plateforme | Non applicable |
| Nom de fichier | Package_for_kb2847346_rtm~31bf3856ad364e35~x86~~6.1.1.0.mum |
| Version de fichier | Non applicable |
| Taille du fichier | 1,459 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 06:35 |
| Plateforme | Non applicable |
| Nom de fichier | Package_for_kb2847346_sp1~31bf3856ad364e35~x86~~6.1.1.0.mum |
| Version de fichier | Non applicable |
| Taille du fichier | 1,819 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 06:35 |
| Plateforme | Non applicable |
| Nom de fichier | X86_dfca12963d5c03edca970b29ad513eb4_31bf3856ad364e35_6.1.7601.22590_none_ff32d7aebbbb6891.manifest |
| Version de fichier | Non applicable |
| Taille du fichier | 699 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 06:35 |
| Plateforme | Non applicable |
| Nom de fichier | X86_microsoft-windows-usermodensi_31bf3856ad364e35_6.1.7601.22590_none_749890603f18301d.manifest |
| Version de fichier | Non applicable |
| Taille du fichier | 8,301 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 06:38 |
| Plateforme | Non applicable |
Fichiers supplémentaires pour toutes les versions x64 prises en charge de Windows 7 et Windows Server 2008 R2
| Nom de fichier | Amd64_37e172e525713d1718cb98daea282913_31bf3856ad364e35_6.1.7601.22590_none_9888f3a0165278fe.manifest |
|---|---|
| Version de fichier | Non applicable |
| Taille du fichier | 1,048 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 06:35 |
| Plateforme | Non applicable |
| Nom de fichier | Amd64_3839818617f8250fd6f59e35da1df9bd_31bf3856ad364e35_6.1.7601.22590_none_8fbf427f98b0d1cb.manifest |
| Version de fichier | Non applicable |
| Taille du fichier | 703 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 06:35 |
| Plateforme | Non applicable |
| Nom de fichier | Amd64_a9af583825031567fe0548a9c2c728ab_31bf3856ad364e35_6.1.7601.22590_none_59ced916edddc9da.manifest |
| Version de fichier | Non applicable |
| Taille du fichier | 703 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 06:35 |
| Plateforme | Non applicable |
| Nom de fichier | Amd64_microsoft-windows-usermodensi_31bf3856ad364e35_6.1.7601.22590_none_d0b72be3f775a153.manifest |
| Version de fichier | Non applicable |
| Taille du fichier | 8,305 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 06:41 |
| Plateforme | Non applicable |
| Nom de fichier | Package_1_for_kb2847346~31bf3856ad364e35~amd64~~6.1.1.0.mum |
| Version de fichier | Non applicable |
| Taille du fichier | 1,832 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 06:35 |
| Plateforme | Non applicable |
| Nom de fichier | Package_2_for_kb2847346~31bf3856ad364e35~amd64~~6.1.1.0.mum |
| Version de fichier | Non applicable |
| Taille du fichier | 2,237 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 06:35 |
| Plateforme | Non applicable |
| Nom de fichier | Package_3_for_kb2847346~31bf3856ad364e35~amd64~~6.1.1.0.mum |
| Version de fichier | Non applicable |
| Taille du fichier | 2,015 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 06:35 |
| Plateforme | Non applicable |
| Nom de fichier | Package_4_for_kb2847346~31bf3856ad364e35~amd64~~6.1.1.0.mum |
| Version de fichier | Non applicable |
| Taille du fichier | 2,036 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 06:35 |
| Plateforme | Non applicable |
| Nom de fichier | Package_for_kb2847346_rtm~31bf3856ad364e35~amd64~~6.1.1.0.mum |
| Version de fichier | Non applicable |
| Taille du fichier | 1,467 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 06:35 |
| Plateforme | Non applicable |
| Nom de fichier | Package_for_kb2847346_sp1~31bf3856ad364e35~amd64~~6.1.1.0.mum |
| Version de fichier | Non applicable |
| Taille du fichier | 2,830 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 06:35 |
| Plateforme | Non applicable |
| Nom de fichier | Wow64_microsoft-windows-usermodensi_31bf3856ad364e35_6.1.7601.22590_none_db0bd6362bd6634e.manifest |
| Version de fichier | Non applicable |
| Taille du fichier | 4,690 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 02:16 |
| Plateforme | Non applicable |
Fichiers supplémentaires pour toutes les versions IA-64 prises en charge de Windows Server 2008 R2
| Nom de fichier | Ia64_44d491142723affea686ec2fba3cb4ac_31bf3856ad364e35_6.1.7601.22590_none_dc26e555dbabe437.manifest |
|---|---|
| Version de fichier | Non applicable |
| Taille du fichier | 1,046 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 06:35 |
| Plateforme | Non applicable |
| Nom de fichier | Ia64_microsoft-windows-usermodensi_31bf3856ad364e35_6.1.7601.22590_none_749a34563f163919.manifest |
| Version de fichier | Non applicable |
| Taille du fichier | 8,303 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 06:35 |
| Plateforme | Non applicable |
| Nom de fichier | Package_1_for_kb2847346~31bf3856ad364e35~ia64~~6.1.1.0.mum |
| Version de fichier | Non applicable |
| Taille du fichier | 2,029 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 06:35 |
| Plateforme | Non applicable |
| Nom de fichier | Package_for_kb2847346_sp1~31bf3856ad364e35~ia64~~6.1.1.0.mum |
| Version de fichier | Non applicable |
| Taille du fichier | 1,446 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 06:35 |
| Plateforme | Non applicable |
| Nom de fichier | Wow64_microsoft-windows-usermodensi_31bf3856ad364e35_6.1.7601.22590_none_db0bd6362bd6634e.manifest |
| Version de fichier | Non applicable |
| Taille du fichier | 4,690 |
| Date (UTC) | 05-févr-2014 |
| de redémarrage (UTC) | 02:16 |
| Plateforme | Non applicable |
Solution de contournement
Pour contourner ce problème, utilisez lʼune des solutions de contournement suivantes se rapportant à votre situation.
Solution de contournement pour le scénario 1
Assurez-vous que l’application, telle que ping.exe, n’est pas arrêtée de force. Au lieu de cela, laissez l’application s’arrêter normalement.
Sinon, effectuez une mise à niveau vers Windows Server 2012. Ce problème est résolu dans Windows Server 2012. Ce correctif empêche le service NSI de provoquer une fuite de mémoire, quelle que soit la façon dont l’application est arrêtée.
Solution de contournement pour le scénario 2
Un développeur de logiciels doit créer plusieurs identifiants ICMP pour envoyer des demandes ICMP. Si vous devez envoyer un grand nombre de paquets ICMP, vous devez utiliser des sockets bruts et envoyer et recevoir directement des paquets ICMP sur le socket RAW. Cela donnera la performance la plus rapide.
Solution de contournement du scénario 3
Dans ce scénario, si vous désactivez et activez la carte réseau, l’utilisation de la mémoire diminue immédiatement, mais entraîne un court pic d’utilisation du processeur.
Cela est dû au fait que lorsqu’un changement se produit dans l’adresse IP ou l’interface, le service NSI est notifié par le noyau. Le service NSI tente ensuite d’avertir tous les clients inscrits pour la notification. Lorsque le service tente d’avertir un processus client qui n’existe pas, le RPC signale une erreur. Par conséquent, le service NSI supprime toutes les informations d’état enregistrées pour ce processus client. Une fois ceci fait, cette mémoire est libérée.
Dans ce cas, plusieurs centaines de milliers de notifications sont enregistrées. Une fois l’événement survenu, toute la mémoire de ces clients non valides est libérée.
Ce problème est résolu dans Windows 8.