J'ai un serveur qui exécute le paquet liquidsoap + icecast et un site Web simple (httpd + mysqld). Rien de spécial. Visiteurs environ 2000+ par jour, avec environ 50 étant en ligne simultanément en moyenne.
Le serveur a 8 Go de RAM. Au fil du temps, la quantité de mémoire libre diminue constamment, bien que rien de nouveau ne soit démarré sur le serveur et qu'il n'y ait pas de nouveaux utilisateurs. À un moment donné, il commence à s'échanger, la charge sur le serveur augmente et il ne répond plus. Habituellement, je redémarre simplement le serveur ...
Que peut-on faire pour détecter ce qui fuit exactement la mémoire? J'utilise top pour surveiller l'utilisation des ressources, mais pour autant que je le vois, cela ne montre rien d'utile:
Existe-t-il un moyen de savoir ce qui utilise autant de mémoire? ou qu'est-ce qui commence à basculer lourdement sur le disque? Est-il possible de libérer de la mémoire sans redémarrer le serveur?
la source
Réponses:
L'exécution
top
en mode batch pour signaler périodiquement les tailles de mémoire peut être utilisée pour voir qui utilise la mémoire lorsque les choses vont au sud. L'exécutionsar
en mode batch devrait fournir de bons diagnostics sur l'utilisation de la mémoire et les E / S associées. Fonctionnementmunin
pour surveiller le système devrait vous donner un graphique avec de bons détails sur la mémoire utilisée. Cela peut aider beaucoup.Vous pouvez utiliser limits.conf pour limiter la taille maximale du cœur des programmes. Correctement réglé, cela devrait tuer tous les programmes qui fuient la mémoire. Cela fonctionne avec le module pam_limits. Des limites peuvent également être définies avec le
ulimits
commande.Vous exécutez quelques programmes qui pourraient utiliser de grandes quantités de mémoire. Certaines choses que vous pourriez regarder incluent.
apache2
peuvent entraîner une fuite de mémoire. Vous devriez voir la taille de la mémoire augmenter lorsque cela se produit. Vous pouvez régler apache2 pour recycler les enfants après un certain nombre d'utilisations en définissantMaxRequestsPerChild
à 100 environ. Si cela résout le problème, vous devez résoudre la fuite. Je regarderais cela en premier.tmpfs
système de fichiers volumineux est monté, vous risquez de perdre de la mémoire si les fichiers ne sont pas supprimés lors de leur utilisation. Les fichiers volumineux de longue durée peuvent également être un problème.Utilisation normale de la mémoire: la mémoire libre n'est pas quelque chose dont vous voulez beaucoup. Si votre système fonctionne depuis longtemps et a beaucoup de mémoire libre, quelque chose ne va pas. Chaque fois que vous lisez ou écrivez un fichier, les blocs iront dans le cache tampon. Cela réduira votre mémoire libre et c'est une bonne chose. Le système gardera suffisamment d'espace libre pour démarrer quelques programmes sans chercher ailleurs la mémoire. Comme de nombreux programmes s'exécutent rapidement, leur mémoire sera renvoyée au pool libre à la fin de leur exécution.
Lorsque vous lisez un fichier qui se trouve dans le cache de tampon, aucun accès au disque n'est requis et la lecture est résolue à partir du cache de tampon. Les écritures utilisent un mécanisme similaire. Si votre système a besoin de mémoire, le cache tampon est l'un des premiers endroits utilisés. La plupart des tampons peuvent être libérés immédiatement.
Si vous avez une fuite de mémoire, vous verrez de la mémoire libre et des tampons commencer à rétrécir. Ce n'est toujours pas un problème grave, car la mémoire perdue devrait finalement être déplacée vers l'espace d'échange. Votre système fonctionnera toujours correctement jusqu'à ce que vous remplissiez l'espace de swap et tirez l'espace libre restant au point où les programmes ne peuvent pas être démarrés. Il est typique qu'une petite quantité d'espace d'échange puisse être utilisée.
la source
sar
aidera à identifier quelle partition possède les E / S et peut aider à découvrir le problème.Vous pouvez utiliser cette commande pour voir les 10 meilleures applications concernant l'utilisation de la RAM:
Parfois, cette commande vous aide si de nombreux sous-processus ont été générés:
De cette façon, vous pouvez voir quels processus vont ensemble.
la source
ps
ou latop
sortie "pmem" (% MEM) soit la bonne chose à regarder si l'on essaie de détecter une fuite de mémoire: n'est-ce pas seulement le pourcentage de la mémoire physique que le processus utilise actuellement? Mais d'autres parties de la mémoire utilisée (y compris les fuites) du processus peuvent être échangées. Peut-être que "taille" ou "vsize" serait plus approprié pour mesurer la taille d'un processus? Par exemple,ps -A --sort -size -o comm,size | head -n 11
oups -A --sort -vsize -o comm,vsize | head -n 11
Rien n'utilise vraiment cette mémoire en termes d'applications.
Vous devez déduire la valeur «mise en cache» qui représente le cache de page pour avoir une meilleure idée de votre utilisation réelle de la mémoire en termes d'utilisation du programme.
Fondamentalement, c'est une bonne gestion de la mémoire et c'est idéalement ce que vous voulez.
Voir le lien ici pour plus d'informations: http://www.linuxatemyram.com/
la source
Je ne suis pas vraiment un pro, mais le savon liquide + icecast est lié au multimédia. Lorsque le système est libre, il met en cache et / ou occupe la mémoire pour une utilisation future. Et si le trafic augmente à un certain moment de la journée / sur une période de temps, il commencera à échanger. À ce stade, si les demandes (utilisateurs visualisant du contenu) augmentent, les ressources nécessaires seront supérieures à 8 Go de RAM.
la source