Quand une ExceptionOffOfMemonry se produit-elle ? Si nous essayons de créer un nouvel objet et que le collecteur n’arrive pas à trouver de mémoire libre, nous pouvons détecter l’exception ; Un autre cas est que lorsque le CLR a besoin de mémoire et que le système ne peut pas la fournir, l’exception sera également lancée. Mais à ce stade, notre application ne peut pas détecter l’erreur.
Analyse de débogage du débordement de mémoire (OutOfMemoryException).
L’espace d’adressage du système d’exploitation 32 bits est 4G, dont 2G est occupé par le système d’exploitation, ce qui signifie que la mémoire laissée au processus utilisateur n’est que de 2G (ce qui déduit aussi une partie de l’espace occupé par l’image lors du chargement du programme, généralement seulement environ 1,6G~1,8G peut être utilisé). Si un processus doit demander de la mémoire pendant son exécution et que le système d’exploitation ne peut pas lui allouer de l’espace mémoire, il produira une exception hors mémoire, System.OutOfMemoryException en .net (l’exception lancée lorsqu’il n’y a pas assez de mémoire pour continuer l’exécution d’un programme). Bien que la manifestation finale soit OutOfMemoryException, la cause peut être différente, et avant de résoudre ce problème, il est nécessaire d’analyser l’état actuel de l’utilisation de la mémoire du processus afin de trouver la cause correcte avant de prescrire le bon médicament. Voici quelques conseils pour déboger de tels problèmes.
Pour plus d’informations, veuillez consulter :http://blog.csdn.net/lazyleland/article/details/6704661
système d’erreur de dépassement mémoire dans le pool d’applications iis.OutOfMemoryException
Sur un serveur web ASP.NET, la quantité de mémoire que ASP.NET peut utiliser n’est généralement pas égale à toute la quantité de mémoire. Dans le fichier de configuration machine.config, <processModel>il y a une propriété « memoryLimit » dans la section configuration, la valeur de cette propriété est un pourcentage, la valeur par défaut est « 60 », c’est-à-dire que le processus ASP.NET (vous pouvez voir le processus ASP.NET dans le gestionnaire des tâches, aspnet_wp dans IIS5, w3wp dans IIS6) peut utiliser 60 % de toute la mémoire physique. Lorsque la quantité de mémoire utilisée par ASP.NET dépasse cette limite, IIS commence à recycler automatiquement le processus, c’est-à-dire à créer un nouveau processus pour gérer les requêtes Http et à récupérer la mémoire occupée par l’ancien processus.
Lorsque nous avons un serveur avec une grande mémoire, la valeur de « memoryLimit » doit être ajustée en conséquence. Par exemple, si nous préparons un serveur avec chemas-microsoft-com ffice marttags » />t="on"> mémoire 4G, alors t="on">4G×60 %=t="on">2.4G. Cependant, pour les systèmes d’exploitation Win32, tout l’espace mémoire qu’un processus peut occuper n’est que t="on">2G. Lorsque la mémoire occupée par le processus ASP.NET commence à atteindre t="on">2G, car elle n’atteint pas le « seuil de recyclage » de t="on">2.4G, IIS ne lance pas l’opération de recyclage, mais en raison des limitations de Win32, il est en réalité impossible d’allouer plus de mémoire à ce processus, donc l’OutOfMemoryException risque d’être rejetée. Pour éviter cela, nous avons dû réduire correctement la « mémoireLimite » afin que l’IIS puisse traiter le recyclage plus tôt.
Microsoft recommande que ASP.NET processus ne prenne pas plus de 60 % de la mémoire, et il est préférable de faire en sorte que la valeur réelle calculée ne dépasse pas t="on">800M. Cela dit, pour un serveur avec t="on " > mémoire 4G, il est préférable de définir la propriété « memoryLimit » à « 20 ». Fixer un seuil de recyclage approprié pour qu’IIS puisse recycler les processus en temps opportun est très important pour assurer le fonctionnement stable de l’ensemble du serveur et éviter OutOfMemoryException.
Dans IIS6, le seuil de recyclage pour ASP.NET processus n’est plus déterminé par la propriété « memoryLimit » dans la section configuration, mais par les paramètres dans la configuration du pool d’applications dans IIS Manager.
Cependant, même si ces configurations sont correctement réglées, rien ne garantit que les OutOfMemoryExceptions seront complètement évitées, et les raisons peuvent être variées et complexes, comme les opérations de récupération de mémoire qui peuvent être trop chronophages. Les développeurs doivent toujours garder à l’esprit de ne pas utiliser et gaspiller de mémoire inutilement dans leur code. :)
Si vous avez un serveur avec une grande mémoire et que vous êtes frustré par la limitation de la mémoire t="on » >2G dans le système d’exploitation Win32, il existe deux solutions alternatives :
- Démarrez l’ordinateur en mode /3GB, et suivez le lien après l’article sur la participation à la méthode
- Utilisez Windows Server 2003 64 bits Edition
Plusieurs éléments pour éviter le débordement de mémoire
Si vous voulez créer un tableau, assurez-vous qu’il a la bonne taille.
Assurez-vous d’avoir assez de mémoire pour un usage interne et de nouveaux objets hébergés.
Si vous programmez sur le .NET Compact Framework, le runtime du langage public lance cette exception lorsqu’il n’y a pas assez de mémoire pour un usage interne ou un nouvel objet géré. Pour éviter cette exception, vous devriez éviter d’écrire de grandes méthodes qui prennent 64 Ko ou plus de mémoire.
Une utilisation excessive de la mémoire gérée est souvent causée par :
- Lisez de grands ensembles de données en mémoire.
- Créer trop d’entrées en cache.
- Téléchargez ou téléchargez de gros fichiers.
- Utilisez trop d’expressions régulières ou de chaînes de caractères lors de l’analyse de fichiers.
- Statut de vue excessive.
- Il y a trop de données ou trop de sessions dans l’état de la session.
- Cette exception peut être déclenchée lorsqu’une méthode est appelée sur un objet COM et que la méthode retourne un type défini par l’utilisateur contenant un tableau sécurisé (un tableau de tailles indéfinies) avec un message supplémentaire « Pas assez d’espace de stockage pour effectuer cette opération ». Cela s’explique par le fait que le .NET Framework ne peut pas interpeller des champs structurels avec des types de tableaux sécurisés.
Un exemple de dépassement de mémoire causé par une utilisation inappropriée des tableaux d’octets
Si le fichier de sortie est particulièrement volumineux, il peut directement signaler System.OutOfMemoryException. La bonne façon de faire cela est de générer le flux d’octets du fichier en segments, mais il existe asp.net méthode prête à l’emploi, Response.WriteFile(filePath), qui fait exactement cela.
Voici la bonne façon d’écrire :
Lorsqu’un asp.net subit un débordement de mémoire, une façon simple de le gérer est de récupérer immédiatement le pool d’applications. Mais cela ne résolvait pas complètement le problème.
Débordement de mémoire lors de la création d’un type d’image (System.OutOfMemoryException)
Code d’erreur : System.Drawing.Image myimg=System.Drawing.Image.FromFile(file. Nom complet) ;
Exceptions qui sont lancées lorsqu’un fichier ouvert n’est pas un fichier image :
MSDN : Cette méthode génère une exception OutOfMemoryException si le fichier n’a pas de format d’image valide, ou si GDI+ ne prend pas en charge le format pixel du fichier.
De telles informations anormales sont facilement trompeuses.
<processModel> élément
Configurez les paramètres du modèle de processus ASP.NET sur le serveur web Internet Information Services (IIS). La section ne peut être définie que dans le fichier <processModel> Machine.config, et elle affecte toutes les applications ASP.NET fonctionnant sur le serveur.
Avertissement Pour des informations concernant cet élément, veuillez lire la section « Notes ».
Exemple de configuration de la structure :
exégèse
Le système de configuration du code géré ne lit <processModel> pas les paramètres de configuration. À la place, elle est lue directement par la DLL non gérée aspnet_isapi.dll. Les changements de cette section prennent effet après que vous redémarriez IIS.
Si vous installez ASP.NET sur un contrôleur de domaine, vous devez prendre des mesures spéciales sinon l’installation ne fonctionnera pas. Pour plus d’informations, voir Situé danshttp://support.microsoft.comL’article de Microsoft dans la Knowledge Base CHS315158 « ASP.NET ne peux pas utiliser le compte ASPNET par défaut sur les contrôleurs de domaine ».
Lorsque ASP.NET fonctionne en mode natif IIS version 6, il utilise le modèle de processus IIS 6 et ignore <processModel> les réglages de la section. Pour configurer l’identité des processus, le recyclage ou d’autres valeurs de modèles de processus, utilisez l’interface utilisateur Internet Services Manager pour configurer les processus travailleurs IIS pour votre application.
La valeur temporelle est formatée en « heures :minutes :secondes ». Si un seul nombre est donné sans deux-points, la valeur est supposée être des minutes ; Par conséquent, timeout="4 » équivaut à timeout="00:04:00 ».
Si une application ASP.NET provoque le redémarrage de ASP.NET processus de travail (Aspnet_wp.exe sur Windows 2000 et Windows XP Professional et W3wp.exe sur Windows Server 2003) et affiche un message d’erreur indiquant que le redémarrage est dû à une condition de blocage suspecté, cela devrait augmenter Réglage responseDeadlockInterval.
Stockez les noms d’utilisateur et mots de passe dans le registre
Stockez les noms d’utilisateur et mots de passe dans le registre
Pour chiffrer les noms d’utilisateur et mots de passe et les stocker dans le registre, définissez le nom d’utilisateur et le mot de passe comme suit.
userName="registry :HKLM\Software\AspNetProcess,Name »
password="registry :HKLM\Software\AspNetProcess,Pwd »
La partie de la chaîne qui vient après le registre de mots-clés et avant la virgule indique le nom de la clé de registre que ASP.NET ouvre. La partie après la virgule contient un nom de valeur de chaîne à partir duquel le ASP.NET lit les lettres d’identité. Des virgules sont requises et les identifiants doivent être stockés dans l’unité de configuration HKLM. Si la configuration est mal formatée, ASP.NET ne démarrera pas le processus worker et apparaîtra ensuite sur le chemin du code d’échec de création de compte courant.
Les identifiants doivent être dans REG_BINARY format et contenir la sortie d’un appel vers la fonction API Windows CryptProtectData. Vous pouvez créer et stocker des identifiants de chiffrement dans le registre avec l’application ASP.NET Settings Registry Console (Aspnet_setreg.exe), qui utilise CryptProtectData pour compléter le chiffrement. Pour télécharger le code source Aspnet_setreg.exe et Visual C++ et obtenir de l’aide, rendez-vous sur le site webwww.asp.netet cherchez « aspnet_setreg ».
Vous devez configurer l’accès aux clés de registre qui stockent les identifiants chiffrés afin que l’accès ne soit accessible qu’aux administrateurs et au SYSTÈME. Puisque la clé du registre sera lue par le processus ASP.NET s’exécutant sous le nom SYSTEM, vous devez définir les permissions suivantes :
Administrators:F
SYSTEM:F
CRÉATEUR PROPRIÉTAIRE : F
ProcessAccount:R
Cela offrira deux lignes de défense pour protéger les données :
Les permissions ACL nécessitent l’accès aux données ayant l’identité de l’Administrateur. L’attaquant devait exécuter du code (CryptUnprotectData) sur le serveur afin de récupérer les identifiants du compte.
exemple
L’exemple suivant spécifie plusieurs <processModel> réglages de configuration.
L’exemple suivant précise que le nom d’utilisateur et le mot de passe chiffrés sont stockés sous l’élément défini par l’utilisateur du registre AspNetProcess.
Exigences
- Inclus dans : <system.web>
- Plateforme web : IIS 5.0, IIS 5.1, IIS 6.0
- Fichiers de configuration : Machine.config, Web.config
- Gestionnaire de section de configuration : System.Web.Configuration.ProcessModelConfigurationHandler
http://doc.51windows.net/iismmc/ ... essmodelelement.htm
|