Sur une installation de Small Business Server 2011, un nombre entier de processus w3wp.exe semblent utiliser une quantité disproportionnée de mémoire. Les installations prêtes à l'emploi SBS sont livrées avec un total de 7 sites et 20 pools d'applications ASP.NET (Sharepoint, Exchange, WSUS et des éléments spécifiques à SBS comme Remote Web Workplace).
La douzaine de processus w3wp.exe qui en résulte a tendance à consommer plus de 4 Go de mémoire du serveur au fil du temps, le pool d'applications de pointe étant celui appartenant à WSUS avec environ 800 Mo dans le jeu de travail. Le recyclage manuel des pools d'applications via IIS MMC permet de réduire temporairement l'utilisation de la mémoire (les processus w3wp.exe diminuent à 10 Mo, certains repoussant rapidement), mais ce n'est évidemment pas quelque chose qu'un administrateur veut faire toute la journée. Je n'ai pas pu trouver de recommandations sur le recyclage automatique des pools d'applications préinstallés SBS, donc je suis quelque peu réticent à "simplement le faire" sur les systèmes de production.
Ma recherche sur le net sur la façon de limiter cela n'a fait apparaître qu'un certain nombre de messages indiquant que la consommation de mémoire w3wp ne nuirait pas mais améliorerait les performances car la mémoire serait "libérée en cas de besoin par d'autres applications". Le problème est que cela ne fonctionne pas:
- pour un, un SBS est un serveur multi-rôle, l'un des rôles (le principal) étant le stockage réseau CIFS qui profite énormément de la mise en cache du système de fichiers qui repose à nouveau sur la mémoire étant "libre" comme dans "non utilisé par d'autres processus dans aucun "- Les pools d'applications ASP.NET qui ne voient presque jamais les utilisateurs et mangent de la mémoire sont contre-productifs
- une autre chose est que je dois encore voir une diminution substantielle de la consommation de mémoire des instances w3wp en cas de pénurie de mémoire - ce que je vois est une diminution mineure de beaucoup moins de 100 Mo et un échange excessif à la place - nuisant encore aux performances
J'administre rarement les applications IIS ou ASP.NET, donc toutes les idées sur la façon de réduire efficacement les besoins en mémoire pour les pools d'applications sont les bienvenues.
la source
Réponses:
Bienvenue dans le monde merveilleux de SBS. Exigences recommandées pour la RAM = 10 Go ... et il nécessite un minimum de 8 Go. ( selon Microsoft .) pour une bonne raison. Ce n'est pas une machine bien huilée bien réglée ... elle est très bâclée, gonflée et a tout sous le soleil. Plus vous pouvez jeter de RAM dans cette boîte ... mieux c'est. Malheureusement, vous êtes limité à 32 Go maximum. À mon humble avis ... c'est idiot.
la source
C'est ce que j'ai fini par faire:
réglage du cache de l' application de serveur pour les AppPools .NET à une faible valeur (5 Mo) en définissant le paramètre privateBytesLimit dans le
web.config
à%WINDIR%\Microsoft.NET\Framework\<version>\Config
comme suggéré dans cette réponse :Cela a permis de réduire l'utilisation de la mémoire à un peu plus de 1 Go avec les paramètres de recyclage de pool par défaut.
Apparemment, l'utilisation du type "serveur" de garbage collector (
<gcServer = "true">
) peut également entraîner une consommation de mémoire importante , mais il semble<gcServer>
être défini sur false par défaut.la source
Si vous pensez que la consommation de mémoire résultante est un problème dû à un défaut logiciel, vous pouvez utiliser Microsoft DebugDiag 1.2 pour créer un vidage mémoire complet et analyser le vidage pour les problèmes courants. Si vous pensez qu'il peut y avoir un problème de mémoire, vous devez activer le suivi des fuites en sélectionnant l'option "Surveiller les fuites" et le laisser fonctionner pendant un certain temps avant de créer / analyser le vidage.
DebugDiag 1.2 Télécharger
https://www.microsoft.com/download/en/details.aspx?id=26798
la source
Vous n'avez pas besoin d'un pool d'applications distinct pour chaque application, seulement celles qui ne sont pas fiables ou auxquelles vous souhaitez donner la priorité. Beaucoup peuvent partager (en gardant différentes versions de .net séparées). Vous pouvez alors limiter de manière plus réaliste la mémoire qu'un pool d'applications utilisera. Il ne devrait pas être nécessaire de recycler plusieurs fois les pools plus d'une fois par jour.
De plus, il n'y a que peu de mémoire pouvant être libérée de cette manière. Bien que certains d'entre eux soient mis en cache, chaque application a besoin d'une certaine quantité de mémoire de travail qui dépend fortement de l'application Web spécifique. Essayer de trop restreindre cela va arrêter les choses.
Le problème est vraiment que SBS essaie d'en faire trop à la fois, vous devez regarder ce que vous utilisez réellement et arrêter ce que vous n'utilisez pas.
Mais pour être honnête pour seulement 11 utilisateurs, où va le reste de la mémoire? Exchange et SQL pour une utilisation légère n'ont certainement pas besoin de plus de 12 Go!
la source