|
|
|
|
||||||
| fr.comp.os.bsd Systèmes BSD et dérivés (NetBSD, FreeBSD, ...). |
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
Hello !
J'ai un petit soucis avec la mémoire sous FreeBSD 6.1. au fur et à mesure du temps, l'occupation mémoire augmente significativement. Dès le lancement de la machine, j'utilise environ 200 Mo de mémoire, et au bout d'une semaine ou deux, la mémoire (1 Go) est saturée, et la machine commence à swapper. Je soupçonne un process qui fuit, mais le truc, c'est qu'aucun process ne semble consommer de la mémoire éxagérément. D'après ps, aucun process ne consomme plus de 2 % de la mémoire... C'est la mémoire « inactive » qui augmente, et elle augmente par paliers brusques, pas régulièrement. Ce qui m'inquiète, c'est que j'ai beau redémarrer tout les services, l'occupation mémoire ne bouge pas. Il n'y a qu'un reboot qui fasse véritablement effet. J'ai un graph : http://graph.nospam.fr.eu.org/nospam...rg-memory.html (login guest, mdp guest) Je ne sais plus où chercher, ni quoi regarder, des idées ? La machine fait tourner, apache, inn, named, postfix, spamassassin, munin, cron, dovecot, proftpd, sshd, et ntpd. |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
Stephane Dupille <sdupille@nospam.fr.eu.org> wrote:
> > C'est la mémoire « inactive » qui augmente, et elle augmente par > paliers brusques, pas régulièrement. Oui et en quoi est-ce ennuyeux que la mémoire inactive augmente? La mémoire inactive c'est de la mémoire libre pour des processus nouveaux. Si tu as des processus de longue durée, les pages de ce processus qui ne sont pas utilisées vont se retrouver dans la mémoire inactive et éventuellement en swap, et alors? -- Michel TALON |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
talon@lpthe.jussieu.fr (Michel Talon) écrit :
> Oui et en quoi est-ce ennuyeux que la mémoire inactive augmente? La > mémoire inactive c'est de la mémoire libre pour des processus > nouveaux. Si tu as des processus de longue durée, les pages de ce > processus qui ne sont pas utilisées vont se retrouver dans la > mémoire inactive et éventuellement en swap, et alors? J'ai pas la même définition de la mémoire inactive : c'est de la mémoire allouée, mais qui n'a pas été accédée recemment, contrairement à la mémoire active. Ce que tu décris correspondrait à la mémoire "cached". Je veux bien un cours sur la mémoire alors, avec des mots simples. ;-) Sinon, un truc : pourquoi la machine se mettrait-elle à swapper après que la mémoire inactive ait occupé tout l'espace ? Pourquoi n'est-elle pas réutilisée ? Et pourquoi monterait-elle par paliers ? |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
Stephane Dupille <sdupille@nospam.fr.eu.org> wrote:
> talon@lpthe.jussieu.fr (Michel Talon) écrit : > > Oui et en quoi est-ce ennuyeux que la mémoire inactive augmente? La > > mémoire inactive c'est de la mémoire libre pour des processus > > nouveaux. Si tu as des processus de longue durée, les pages de ce > > processus qui ne sont pas utilisées vont se retrouver dans la > > mémoire inactive et éventuellement en swap, et alors? > > J'ai pas la même définition de la mémoire inactive : c'est de la > mémoire allouée, mais qui n'a pas été accédée recemment, contrairement > à la mémoire active. Ce que tu décris correspondrait à la mémoire > "cached". Je ne suis pas d'accord. Tu as une description sommaire à la fin de man top: Active: number of pages active Inact: number of pages inactive Wired: number of pages wired down, including cached file data pages Cache: number of pages used for VM-level disk caching Buf: number of pages used for BIO-level disk caching Free: number of pages free En réalité tout ce qui est inactif, cache ou buf est susceptible d'être recyclé dans free a tout moment. Tout ce qui est active ou wired par contre n'est pas recyclable, et ce qui est wired ne peut être envoyé en swap. > > Je veux bien un cours sur la mémoire alors, avec des mots simples. > ;-) > > > Sinon, un truc : pourquoi la machine se mettrait-elle à swapper > après que la mémoire inactive ait occupé tout l'espace ? Pourquoi > n'est-elle pas réutilisée ? Et pourquoi monterait-elle par paliers ? Bien forcément, si tu as affaire a des pages qui correspondent à par exemple de la mémoire dynamique d'un processus (malloc ...) qui n'est plus utilisée, ça va être de la mémoire active, en réalité qui n'est plus utilisée, mais qui ne peut être purement et simplement jetée, donc il faut la garder en copie dans le swap pour faire place pour de nouvelles applications. Tu sais que les processus comme mozilla etc. demandent de la mémoire dynamique et ne la relachent jamais. Une nouvelle demande de mémoire est satisfaite dans l'ancienne plage qui a été allouée, puis libérée tant qu'il reste de la place, ensuite une nouvelle allocation est faite. Si bien que la consommation mémoire de ces engins ne fait qu'augmenter indéfiniment. Donc ces processus font bien augmenter la consommation mémoire par paliers. Note que la mémoire inactive ça peut être un processus de courte durée de vie, comme sh, que tu vas lancer par exemple dans un script à répétitions. Au deuxième lancement la première copie encore résidente en mémoire va être réutilisée, sans avoir besoin de recharger à partir du disque. Parmi les processus que tu mentionnes il y a inn qui est susceptible de crééer de grosses demandes de mémoire dynamique. Dans mon souvenir il garde en mémoire la trace de toutes les transactions pendant un moment puis les flushe sur le disque quand on lui envoie la commande ctlinnd flush ... Si ton site est important il y a là une possibilité pour expliquer ce qui t'arrive. Toujours est-il qu'en principe FreeBSD ne se met jamais à swapper furieusement comme Linux, en principe il y a constamment un petit débit vers le swap quand une pression sur la mémoire se fait sentir, pour préparer de la place libre suffisamment à l'avance. Même à l'époque où on avait 64 Megs de mémoire sur les PC je n'ai jamais vu le système de swap de FreeBSD se vautrer lamentablement comme celui de Linux, même en faisant tourner de gros Netscape et autres saloperies qui occupaient la quasi totalité de la mémoire à eux seuls. A mon avis tu peux traîter ton problème de swap par le mépris, il ne doit absolument pas impacter les performances. > > -- Michel TALON |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
talon@lpthe.jussieu.fr (Michel Talon) écrit :
>> J'ai pas la même définition de la mémoire inactive : c'est de la >> mémoire allouée, mais qui n'a pas été accédée recemment, contrairement >> à la mémoire active. Ce que tu décris correspondrait à la mémoire >> "cached". > Je ne suis pas d'accord. Tu as une description sommaire à la fin de man top: C'est plutôt court comme description... ![]() > Active: number of pages active > Inact: number of pages inactive Ce qui n'explique pas précisemment ce que c'est. > Wired: number of pages wired down, including cached file data pages > Cache: number of pages used for VM-level disk caching > Buf: number of pages used for BIO-level disk caching Quelle différence entre cache et buf ? J'arrive pas à trouver la page man qui décrit tout ça avec suffisemment de précision... > Free: number of pages free > En réalité tout ce qui est inactif, cache ou buf est susceptible d'être > recyclé dans free a tout moment. Tout ce qui est active ou wired par contre > n'est pas recyclable, et ce qui est wired ne peut être envoyé en swap. OK. Alors, si c'est ça, je ne m'inquiète pas. > Toujours est-il qu'en principe FreeBSD ne se met jamais à swapper > furieusement comme Linux, en principe il y a constamment un petit > débit vers le swap quand une pression sur la mémoire se fait sentir, > pour préparer de la place libre suffisamment à l'avance. Même à > l'époque où on avait 64 Megs de mémoire sur les PC je n'ai jamais vu > le système de swap de FreeBSD se vautrer lamentablement comme celui > de Linux, même en faisant tourner de gros Netscape et autres > saloperies qui occupaient la quasi totalité de la mémoire à eux > seuls. A mon avis tu peux traîter ton problème de swap par le > mépris, il ne doit absolument pas impacter les performances. Non, il n'y a pas trop de pression sur le swap. Juste qu'avec toute la mémoire vite qu'il est censé y avoir, si vraiment la mémoire inactive est transférable en free, pourquoi est-ce qu'il swappe au lieu de récupérer de la mémoire ? Il est censé avoir 7/10è de la mémoire dispo ! |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
Stephane Dupille <sdupille@nospam.fr.eu.org> wrote:
> talon@lpthe.jussieu.fr (Michel Talon) écrit : > >> J'ai pas la même définition de la mémoire inactive : c'est de la > >> mémoire allouée, mais qui n'a pas été accédée recemment, contrairement > >> à la mémoire active. Ce que tu décris correspondrait à la mémoire > >> "cached". > > Je ne suis pas d'accord. Tu as une description sommaire à la fin de man top: > > C'est plutôt court comme description... ![]() > > > Active: number of pages active > > Inact: number of pages inactive > > Ce qui n'explique pas précisemment ce que c'est. Une page active possède une ou des références dans le système de mémoire virtuelle. Les pages inactives correspondent aux pages qui sont en train de migrer de l'état actif à l'état swappé et peuvent être réutilisées rapidement. Tu peux aussi regarder ce passage dans man systat Below the paging statistics is a column of lines regarding the virtual memory system which list the average number of pages copied on write (`cow'), pages zero filled on demand (`zfod'), slow (on-the-fly) zero fills percentage (`%slo-z'), pages wired down (`wire'), active pages (`act'), inactive pages (`inact'), pages on the buffer cache queue (`cache'), number of free pages (`free'), pages freed by the page daemon (`daefr'), pages freed by exiting processes (`prcfr'), pages reactivated from the free list (`react'), times the page dae- mon was awakened (`pdwak'), pages analyzed by the page daemon (`pdpgs'), and intransit blocking page faults (`intrn') per second over the refresh interval. Ou encore ce message de J. Dyson: Cache are the pages that are available for quick reuse. Inact and Active are part of the staging algorithm, where Inact is use as a 2nd chance and staging for cleaning (writing changed data.) Free are also pages that are available for quick reuse, but have no data, and are available at interrupt time. > > > Wired: number of pages wired down, including cached file data pages > > Cache: number of pages used for VM-level disk caching > > Buf: number of pages used for BIO-level disk caching > > Quelle différence entre cache et buf ? Je suppose qu'il existe des buffers pour gérer l'entrée sortie sur le disque au niveau le plus bas, c'est ce qu'il doit appeler BIO-level. Ensuite il y a le buffer-cache traditionnel qui est le cache système des entrées sorties disque. Dans FreeBSD il est unifié avec la mémoire générale virtuelle des applications, donc tu as une distinction au niveau des statistiques. Voici une référence trés détaillée: http://mail.nl.linux.org/linux-mm/2000-05/msg00419.html > > Non, il n'y a pas trop de pression sur le swap. Juste qu'avec toute > la mémoire vite qu'il est censé y avoir, si vraiment la mémoire > inactive est transférable en free, pourquoi est-ce qu'il swappe au > lieu de récupérer de la mémoire ? Il est censé avoir 7/10è de la > mémoire dispo ! Ben justement c'est la différence avec Linux. J. Dyson s'est aperçu qu'il était plus efficace de swapper régulièrement une petite quantité de pages plutôt que d'attendre le dernier moment et de swapper un gros coup. Aussi de mettre un amortissement suffisamment fort dans le système pour qu'il n'y ait pas de "thrashing" c'est à dire que tu sois obligé de ramener sans arrêt en mémoire des pages que tu viens de swapper, genre d'oscillations qui étaient coutumières sous Linux. Et enfin, le plus compliqué il tient à jour des statistiques d'utilisation des pages pour choisir celles qu'on va transfèrer en swap parmi les moins utilisées. Pendant longtemps Torvalds s'est opposé à ce qu'il y ait un tel système sous Linux sous prétexte que c'était trop compliqué et trop couteux en ressources (il faut aussi tenir à jour un "reverse mapping" pour savoir rapidement à quels processus allouer telle ou telle page qu'on se propose de virer en swap). Une première version est apparue au début du kernel 2.4 et il l'a virée, le système se trouve enfin dans le kernel 2.6. -- Michel TALON |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
ha oui moi aussi j'ai la mm chose mais il me semble que chez moi ca ne
swap pas bcp ! par contre je suis pas sur que se soit tres conseillé de faire tourné ntpd sur une machine avec autant de deamon actif (si je me souviens bien de la doc). merci Mr Tallon sur ces infos sur la memoire . bsdouille |
|
![]() |
| Outils de la discussion | |
|
|