On Tue, Feb 11, 2003 at 08:35:50AM +0100, Moncho Jeremy wrote:

> Y-a-t'il moyen de de liberer (flush) la RAM sans rebooter?

Sous UNIX, lorsqu'un processus se termine (*), toute la mémoire utilisée
est automatiquement rendue.

(*) exceptions:
       - memory-leak du kernel (mais en général ça se voit)
       - crash en mode kernel
       - régions de mémoire partagée non rendus (voir la commande ipcs)
       - fichier temporaire (`mémoire disque') non effacés

Probablement que vous voyez quelque chose comme:

             total       used       free     shared    buffers cached
Mem:        127148     111328      15820          0       1856 45456
-/+ buffers/cache:      64016      63132
Swap:       248968      47000     201968

et vous vous dites, j'aimerais bien ne plus avoir de swap utilisé, et
plein de mémoire *libre* (sous free).

Réponse rapide:

   # swapoff -a; swapon -a   # vide le swap

Réponse longue:

   S'il n'y a pas ou très peu d'activité sur le swap (voir commande
   vmstat 5, colonnes si et so sur une longue durée), les données
   qui sont en swap ont donc été mises là pour une excellente raison:
   elles ne servaient à rien et la mémoire RAM libérée ainsi peut
   être utilisée pour de meilleurs usages (autres données, cache
   disque).

   De plus, à quoi sert d'avoir la RAM complètement libre si les
   entrées/sorties n'ont qu'un tout petit cache ?  La mémoire libre,
   par définition, est gaspillée.

   En conséquences les systèmes UNIX modernes ajustent dynamiquement
   les paramètres de cache: ils laissent un peu de mémoire libre
   pour permettre aux interruptions (trafic réseau p.ex.) d'allouer
   atomiquement de la mémoire sans devoir swapper quelque chose ou
   écrire des buffers. Mais en théorie, si le système ne fait qu'écrire,
   par exemple, on finira par free petit, buffers très grand, et
   un peu d'activité de swap au début.

Donc ce n'est pas le fait d'avoir des choses dans le swap qui est
problématique, mais d'en avoir besoin (si et so élevés dans vmstat 5).

Enfin, ce n'est pas parce que la mémoire libre n'augmente pas lorsqu'un
processus se termine que la mémoire est perdue: il faut garder à
l'esprit l'ensemble (swap, buffers, cached, free). D'ailleurs la
commande free fait ce calcul: dans l'exemple ci-dessus, il y a en fait
63 MB de mémoire RAM libre, et 264 MB de mémoire libre. Dont 200 de swap
(en dernier recours), 45 MB de cache lecture (donc dès qu'on en a besoin
on peut l'utiliser comme mémoire normale), et 2 MB de cache écriture
(qu'il faut écrire sur disque avant de pouvoir réutiliser).

Tous ces paramètres sont contrôlables, mais à part quelques versions
bancales (2.4.10 à 2.4.17) du kernel ça fonctionne en général bien tout
seul.

Donc en bref, rebooter votre machine donnera peut-être au début
l'illusion d'une grande rapidité.

--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se désabonner aussi.

Répondre à