Memory leaks sous Linux ?

yo! les geeks,

C’est pas de la prog. à proprement parler, mais comme c’est assez technique, je me dis que bon, voilà quoi…
J’ai un chouette serveur Linux, Suse 9.1 (kernel 2.6) qui fait fonctionner du Apache 1.3, du PHP 4.2 et du MySQL 4.0. La machine est conséquente puisqu’il y a 2 Go de RAM à bord.
J’observe la mémoire utilisée avec la commande top, et sur environ une dizaine de jours elle se remplit encore et toujours jusqu’à presque atteindre les 2 Go. Je n’ai pas encore eu l’occasion de la voir aller au delà (swap) puisque dans la panique j’ai rebooté la machine.

Dans un premier temps j’ai pensé à des fuites de mémoire provenant du kernel ou d’un des trois compères (Apache/PHP/MySQL) qui tournent dessus. Puis, en faisant des test de-ci de-là je me suis rendu compte que finalement c’était ptet normal. Le test flagrant :

  • j’installe un Linux tout neuf sur une autre machine qui a 256 Mo de RAM.
  • je chope les sources d’Apache, etc.
  • je lance une session SSH pour compiler les softs et je lance une session SSH pour observer la mémoire (commande top, toujours)
  • Les compilations se font les unes après les autres, et la mémoire se remplit progressivement jusqu’à atteindre les 245 Mo environ. Pas de swap, ou alors pas grand chose (8 Ko).
  • Une fois que les compilations sont finies : ma mémoire reste occupée à 245Mo !!!

Vous en pensez quoi ?
Normal ?
Pas normal ?

Thx
Antoine

Normal, cache disque.

Pas paniquer.
La ram qui sert à rien, ton kernel s’en sert pour faire du caching. Ca m’a déconcerté au début, et puis, j’ai vu qu’en effaçant des fichiers sous samba il me ramenait de la ram. ET puis j’ai regardé sous top ce qu’il faisait de ma ram.

Et j’ai arrêté de me prendre la tête, si dans la machine y’a de la ram qui sert à rien, c’est de la ram achetée pour rien, et c’est mal.

J’éspère avoir répondu à la bonne question ?

Ouais, quand il arrive à 100% de ram, il n’explose pas, c’est pas le serveur de l’Agence Tous Risque, et si tu veux voir la ram bouffée à 100% y’a http://finn.homeip.net/graphes qui monitore l’usage de la ram sur mon microbe (kernel 2.6 aussi, 512 + 128 mo donc pas autant, il fait plein de trucs) et à 100%, bah il n’explose pas. Et 50% de ma ram sert à faire du cache.

Pas de panique, comme disait Ford Escort.

Edit : le swap, ça sert à mettre les données présentes dans la ram, et qui ne sont pas utilisées. Le concept de “mémoire dispo” est assez chloute au premier abord, mais une fois l’aspect déroutant passé, ça marche très bien.

J’ajouterais que les noyaux 2.4 et superieur place parfois en SWAP les demons non utilises, pour gagner un peu de place en RAM. Pour le voir, faire un ps aux |grep W

LoneWolf
Info courte

En effet, j’observe tout pareil sur mon serveur. L’inconvénient, c’est que du coup, pour savoir la ram réellement « utilisée » (dans le sens, utilisée par une application), c’est moins évident.

D’ailleurs, t’utilises quoi good_boy ? C’est sympa ton truc de graphes :stuck_out_tongue:

En fait, c’est assez difficile de savoir combien de ram utilise un processus.
Normalement, c’est en faisant “ps aux” qu’on a la liste, et VSZ et RSS qu’il faut lire. Mais j’ai du mal a comprendre la difference entre les 2 (et le man m’aide pas)

Sinon, pour la taille totale utilisee par le systeme, y a moyen:

umichan:~ $ cat /proc/meminfo        total:    used:    free:  shared: buffers:  cached: Mem:  1057910784 246280192 811630592        0  4554752 141336576 Swap: 254943232        0 254943232 MemTotal:      1033116 kB MemFree:        792608 kB MemShared:           0 kB Buffers:          4448 kB Cached:         138024 kB
Ici, la memoire utilise (ce qu’on appele used+shared), c’est:
Memtotal - MemFree - Buffers - Cached

Je vais continuer a chercher un peu sur le web et j’editerais si je trouve d’autres trucs
edit: hop, un lien ps BSD manpage, en esperant que ca corresponde aussi sous linux

Note: tests fait sur un noyau 2.4.27

LoneWolf
A la recherche de la memoire perdue

[quote name=‹ tuo › date=’ 21 Nov 2004, 02:57’]En effet, j’observe tout pareil sur mon serveur. L’inconvénient, c’est que du coup, pour savoir la ram réellement « utilisée » (dans le sens, utilisée par une application), c’est moins évident.

D’ailleurs, t’utilises quoi good_boy ? C’est sympa ton truc de graphes :stuck_out_tongue:
[right][post=« 305374 »]<{POST_SNAPBACK}>[/post][/right][/quote]

J’utilise un truc que mon cousin a dev’ et que j’ai tuné sa race mortelle
Mais c’est pas très user friendly ni documenté, hein. En revanche si tu connais un peu le code (haha) php c’est kakos. le code est un peu commenté

Basiquement c’est un cron toutes les minutes de n jobs perl. Le perl fait un cat de proc/machin ou récupère la sortie de la commande sensors ou smartmon, et te colle tout ça dans une base sql. Timestamp, valeur.

Après t’as une page html qui se rafraîchit toutes les minutes, avec les images générées sous GD. J’ai une version kernel 2.4, celle que tu as vue est le 2.6 (kit postcombustion parce que les infos sur l’usage de la mémoire sont plus étendues avec le kernel 2.6)

J’ai ajouté les sondes de tempé (récup par lm_sensors, les tensions je m’en tape) et les tempétaures disque (utilisation de smartmonitor - smartctl)

Basiquement tu peux faire la même chose avec un produit nommé MRTG et des plugins mais c’est un vrai produit, pas trois scripts, faut l’installer et ca ne fait pas, dirons nous, le cron, c’est ondeman. Moi je suis limité par cron.

L’avantage de mon truc c’est que c’est ultraportable et ça se bricole en deux secs. J’avoue que mrtg m’a rebuté, voilà quoi.

Si j’étais moins feignant je mettrais un bouton refresh pour faire un system (/opt/graphes/net);

Mais bon, je devrais modifier la génération des graphes… Si tu veux le code je le met en dl ou je te le file…