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?
L'exécution de top
en mode batch pour signaler périodiquement la taille de la mémoire peut être utilisée pour voir qui utilise la mémoire lorsque les choses tournent au sud. L'exécution sar
en mode batch devrait fournir de bons diagnostics sur l'utilisation de la mémoire et les E/S associées. L'exécution de munin
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 la commande ulimits
.
Vous exécutez quelques programmes qui pourraient utiliser de grandes quantités de mémoire. Certaines choses que vous pourriez regarder incluent.
Apache2
peut 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éfinissant MaxRequestsPerChild
sur 100 ou plus. Si cela résout le problème, vous devez résoudre la fuite. Je regarderais cela en premier.tmpfs
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.
Vous pouvez utiliser cette commande pour voir les 10 meilleures applications concernant RAM usage:
ps -A --sort -rss -o comm,pmem | head -n 11
Parfois, cette commande vous aide si de nombreux sous-processus ont été générés:
ps auxf
De cette façon, vous pouvez voir quels processus vont ensemble.
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/
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.