Vive la mémoire... LIBRE !!!

Message
Author
Médor

#16 Post by Médor »

Voici mon script modifié suivant ma dernière capture et mes remarques de mon message précédent.

Code: Select all

#!/bin/sh 
# $MAPPS/Systeme/cleanup_mem.sh # simple tool for puppy linux to clean caches
# Joe Arose, alias "big_bass" # Mise en forme et ajouts par musher0,
# 20 mai 2013; rév. 30 janv. 2015
#rev. 31 Janv Médor.
####
MMLBR="/tmp/mem_libr.txt";RMPL="replaceit --input=$MMLBR" # variables

if [ ${LANG:0:2} = "fr" ];then # param. less
   MEV="'q' pour quitter            =-=-=-=           Mémoire vive libérée";AV="Avant (Mo)";AP="Après (Mo)"
else
   MEV="'q' to quit                   =-=-=-=                        Freed RAM";AV="Before (MB)";AP="After (MB)"
fi # langues, 1

##[ "`pidof -s aepanel`" ] && echo "aepanel existe" > /tmp/aepanelE && kill [ "`pidof -s aepanel`" ] &>/dev/null # si aepanel

> $MMLBR # Créer fichier à afficher

FreeMem ()
{
echo "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= .......... =-=-=-=-=-=-=-=-=-=-=-=-=-=" >> $MMLBR
if [ ${LANG:0:2} = "fr" ];then
   echo "             total      utilisé        libre      partagé      tampons" > /tmp/mevlibr
   free -m | tail -n 3 >> /tmp/mevlibr
   cat /tmp/mevlibr >> $MMLBR;rm -f /tmp/mevlibr
else 
   free -m >> $MMLBR
fi 
echo . >> $MMLBR
}

a="`free -m | awk 'NR=="2" { print $4 }'`"
echo "                                $AV" >> $MMLBR
FreeMem # L'avant

sync ; echo 3 > /proc/sys/vm/drop_caches;wait # Action

b="`free -m | awk 'NR=="2" { print $4 }'`"
echo "                                $AP" >> $MMLBR
FreeMem # L'après

d="`free -m | awk 'NR=="4" { print $3 }'`" # État du fichier d'échange
c="`expr $b - $a`" # calcul

if [ ${LANG:0:2} = "fr" ];then
   [ "$d" = "0" ] && INCHANG="fich. d'échange non utilisé" || INCHANG="fichier d'échange UTILISÉ"
   TITR="MEV libérée : $c Mo; $INCHANG."
# Traduction
   $RMPL "-/+ buffers:" " ± tampons :";$RMPL Swap Éch.;$RMPL "Mem:" Mém.
else
   [ "$d" = "0" ] && INCHANG="swap file not in use" || INCHANG="swap file IN USE"
   TITR="Freed RAM: $c Mb; $INCHANG."
fi # langues, 2

# Afficher
G="g 72x15-250+300";CLR="fg white -bg AntiqueWhite4" # param. urxvt
TRNSP="tr -tint grey79 -sh 99";FNT="fn xft:Monaco:pixelsize=13:autohint=true"

urxvt -$G -T "$TITR" +sb &>/dev/null -e less -L -~ -P "$MEV" $MMLBR

# Terminer # Replacer aepanel s'il y a lieu, et

rm -f $MMLBR # nettoyage
Cordialement,
Médor.

musher0
Posts: 14629
Joined: Mon 05 Jan 2009, 00:54
Location: Gatineau (Qc), Canada

#17 Post by musher0 »

Y a pas de quoi se chicaner !!! :) ;)

Chez toi, la fonction FreeMem ne rejimbe pas sous bash, sans la mention
"function" avant ? Chez moi, si. Vérifie dans ton xerrs_log ?

C'est justement une des différences entre bash et ash. À+

musher0
musher0
~~~~~~~~~~
"You want it darker? We kill the flame." (L. Cohen)

Médor

#18 Post by Médor »

Ici après avoir relancé X (uptime: 2d 11:48 ...) je n'ai aucune erreur dans xerrs.log ni même dans la console concernant ce script ...

Cordialement,
Médor.

musher0
Posts: 14629
Joined: Mon 05 Jan 2009, 00:54
Location: Gatineau (Qc), Canada

#19 Post by musher0 »

Médor wrote:Ici après avoir relancé X (uptime: 2d 11:48 ...) je n'ai aucune erreur dans xerrs.log ni même dans la console concernant ce script ...

Cordialement,
Médor.
Évidemment, relancer X efface Xerrs_log automatiquement ! ;)
musher0
~~~~~~~~~~
"You want it darker? We kill the flame." (L. Cohen)

Médor

#20 Post by Médor »

Ne me prend pas pour un imbécile :!!
J'ai vérifié avant de relancer X et le script je l'avais lancé une bonne dizaine de fois auparavant lors de mes modif.
je n'avais pas d'erreur mon plus avec ton script original :!:

Après avoir relancer X, J''ai bien évidemment relancé le script avec deux ouvertures du fichier /tmp/xerr.log avant et après l'exécution du script :!:


Médor.

musher0
Posts: 14629
Joined: Mon 05 Jan 2009, 00:54
Location: Gatineau (Qc), Canada

#21 Post by musher0 »

Loin de moi la pensée !!!

Simplement, je trouve curieux que ça marche sans probl. chez toi -- et tant mieux,
ça t'évite des révisions. Mais, sur mon slacko-6.0b, si j'essaie de faire tourner une
fonction style ash en bash ou inversement, à partir du testeur de geany, geany me
le fait savoir en termes clairs !!!

Et ça s'inscrit dans Xerrs_log. C'est pour ça que j'en parlais.

Bye!

Christian
musher0
~~~~~~~~~~
"You want it darker? We kill the flame." (L. Cohen)

augras
Posts: 1487
Joined: Mon 11 Nov 2013, 17:37
Location: france

#22 Post by augras »

Bonjour,
jplt wrote:Bonjour augras,
tu pourrais poster ta version avec tes modifications ?
J'ai été grillé sur le poteau pendant la nuit !
musher0 wrote: Rappel amical : les lunettes, c'est sur le nez que ça se porte ! :D ;)
Et oui, le problème étant que j'ai effectivement besoin de lunettes depuis environ 8 mois et que je n'ai pu obtenir un rendez-vous chez le spécialiste que fin juin, dans 5 mois.... 13 mois au total.
Notre système de santé tombe vraiment en décrépitude ! Et au final je ne vois plus les titres des fenêtres : pas facile tous les jours :wink:
musher0 wrote: Je joins une archive *.pet de replaceit pour la
commodité de la chose.
Je n'ai pas compris l'utilité de replaceit : supprimé du code tout fonctionne, apparemment, mais comme j'ai besoin de lunettes je me méfie maintenant, tout à fait normalement. J'avais compris que c'était pour les traductions mais tout est prévu dans le code.
Concrêtement quelle est la différence entre

Code: Select all

sync ; echo 3 > /proc/sys/vm/drop_caches;wait # Action 
et

Code: Select all

sync ; echo 3 | tee /proc/sys/vm/drop_caches &>/dev/null;wait # Action 
Musher0, dans ta version Mo est-ce que en ligne 27

Code: Select all

free >> $MMLBR 
tu n'aurais pas oublié le "-m" pour avoir

Code: Select all

free -m>> $MMLBR 
C'est pas trop mon truc le code, je m'interroge simplement.
Bonne journée,
Philippe

Médor

#23 Post by Médor »

Médor wrote:Re,

J'ai notamment modifié comme ci-dessous la ligne pour la purge suivant mon dernier message sur mon fil de mes pets de cleanup_memory & cleanup_mozilla (GUI).

Code: Select all

sync ; echo 3 > /proc/sys/vm/drop_caches;wait # Action
...
Bonjour Philippe,

voir mon lien ci-dessus, la commande tee n'est pas nécessaire et provoque des erreurs bien quelles soient honteusement flanquées sous le paillasson par : "&>/dev/null"


Cordialement,
Médor.

augras
Posts: 1487
Joined: Mon 11 Nov 2013, 17:37
Location: france

#24 Post by augras »

Pour replaceit j'ai trouvé, je crois :

Code: Select all

# Traduction
   $RMPL "-/+ buffers:" " ± tampons :";$RMPL Swap Éch.;$RMPL "Mem:" Mém. 
Il n'intervient qu'à ce niveau et sans lui j'ai buffers au lieu de tampons et swap au lieu de Mem !
Sinon pour le reste il n'intervient pas ?
J'ai bon ?
Philippe

augras
Posts: 1487
Joined: Mon 11 Nov 2013, 17:37
Location: france

#25 Post by augras »

Médor wrote:la commande tee n'est pas nécessaire et provoque des erreurs bien quelles soient honteusement flanquées sous le paillasson par : "&>/dev/null"
Merci Médor,
Je viens de lancer le script de Musher0, avec tee, et aucune erreur dans la console !
Je suis sous tahrpup6.01.
Philippe

Médor

#26 Post by Médor »

augras wrote:Pour replaceit j'ai trouvé, je crois :

Code: Select all

# Traduction
   $RMPL "-/+ buffers:" " ± tampons :";$RMPL Swap Éch.;$RMPL "Mem:" Mém. 
Il n'intervient qu'à ce niveau et sans lui j'ai buffers au lieu de tampons et swap au lieu de Mem !
Sinon pour le reste il n'intervient pas ?
J'ai bon ?
Philippe
Je vais regarder de plus près car je crois que je suis mal réveillé ;)

"tee" est à supprimer, si tu la laisse supprime "&>/dev/null" et regarde /tmp/xerrs.log :!:

Cordialement,
Médor.
Last edited by Médor on Sun 01 Feb 2015, 10:26, edited 2 times in total.

augras
Posts: 1487
Joined: Mon 11 Nov 2013, 17:37
Location: france

#27 Post by augras »

Je suis étonné : après avoir lancé le script quand je compare l'indication de mémoire utilisée avec celle donnée par lxtask, ce dernier indique environ 300 Mo de moins !

EDIT : je crois que je me suis mal exprimé et que l'on ne comprend pas ce que je voulais dire ! Le script m'indique après nettoyage par exemple 800 Mo utilisés alors que lxtask m'indique 500 Mo. On est pas à quelques Mo mais là il est anormal que 2 outils aient une telle différence dans le calcul de la mémoire vive utilisée.

musher0
Posts: 14629
Joined: Mon 05 Jan 2009, 00:54
Location: Gatineau (Qc), Canada

#28 Post by musher0 »

augras wrote:
Médor wrote:la commande tee n'est pas nécessaire et provoque des erreurs bien quelles soient honteusement flanquées sous le paillasson par : "&>/dev/null"
Merci Médor,
Je viens de lancer le script de Musher0, avec tee, et aucune erreur dans la console !
Je suis sous tahrpup6.01.
Philippe
Salut, augras.

Deux-trois réponses ici, si tu permets.

Au sujet de ta remarque sur l'apparente incohérence entre free simple et free -m à
la ligne 27, j'ai tout uniformisé depuis, ici :
http://murga-linux.com/puppy/viewtopic. ... ost#825247

À strictement parler, j'aurais pu laisser free sans param. à la ligne de la variable
"d", puisque je vais pêcher la dimension du fichier d'échange seulement pour savoir
si 0 ou pas. Et 0 = 0...

Mais... à vrai dire, il faudrait que ce soit free -b et non free -m à cet endroit,
puisqu'on veut observer s'il y a la moindre chose dans le fichier d'échange. Car
0b != 0k != 0M != 0G, n'est-ce pas ? Par ex., on aurait 999 999,999 Mo dans un
fichier, et il ne serait pas faux de dire que ce fichier fait encore 0G... L'ordre de
grandeur détermine la sensibilité.
~~~~

Au sujet de l'erreur avec tee, je l'ai envoyée au pays des bytes oubliées par la
redirection &>/dev/null. Si pas de tee, pas besoin de redirection.

En réponse à Médor, la ligne avec tee, c'est la ligne originale de Joe, et à priori, je
ne touche pas aux lignes originales quand je remanie (question de respect, pas
d'efficacité informatique). Mais si tu me dis que l'emploi de tee n'est pas justifié,
c'est autre chose.

En passant, pas d'adjectif "honteux", s.t.p. On fait de l'informatique ici, pas de la
psycho populaire.
~~~~

Pour revenir à la question d'augras sur l'emploi de la dépendance replaceit. oui,
c'est ça, replaceit ne remplace que 2 mots.

Il faut aussi songer à l'alignement corect des colonnes et à la ponctuation correcte
en français. J'ai fait exprès de traduire "-/+ buffers:" par " ± tampons :" C'est
l'usage du signe "±" précédé d'un espace qui permet de respecter l'alignement et
la grammaire. Ouf... Merci aux scientifiques pour ce signe !

On pourrait se passer de replaceit en traitant chaque ligne de free séparément dans
awk ou autre à mesure qu'elle défile. Alors il faut fournir la traduction dans le script
puis utiliser du raboutement de "chaînes" avancé, car les chiffres changent dans les
lignes à chaque fois que le script tourne. C'est possible, mais j'ai un p'tit côté
paresseux : pourquoi le faire toi-même quand replaceit peut le faire à ta place ?! :)
~~~~

À+

musher0
musher0
~~~~~~~~~~
"You want it darker? We kill the flame." (L. Cohen)

Médor

#29 Post by Médor »

Bonsoir musher0,
musher0 wrote:En réponse à Médor, la ligne avec tee, c'est la ligne originale de Joe, et à priori, je
ne touche pas aux lignes originales quand je remanie (question de respect, pas
d'efficacité informatique). Mais si tu me dis que l'emploi de tee n'est pas justifié,
c'est autre chose.
Tu ne sembles pas avoir lu mon dernier message sur mon fil de freemem_memory & freemem_mozilla GUI :!:

J'ai supprimé cette commande 'tee' inutile, de plus elle génère un message d'erreur qui se retrouve donc dans /tmp/xerrs.log à moins de le cacher sous le paillasson avec "&>/dev/null" en fin de ligne :evil:

Lire l'extrait de la page de man jointe sur mon fil :!:
La commande 'tee' n'est pas mentionnée ;)


Cordialement,
Médor.

musher0
Posts: 14629
Joined: Mon 05 Jan 2009, 00:54
Location: Gatineau (Qc), Canada

#30 Post by musher0 »

Vu. Merci de l'explication donnée là.

Bon, ben... retour à l'établi ! :)

À+

musher0
musher0
~~~~~~~~~~
"You want it darker? We kill the flame." (L. Cohen)

Médor

#31 Post by Médor »

musher0 wrote:Bon, ben... retour à l'établi !
Je te fais confiance ;)

Cordialement,
Médor.

jplt

#32 Post by jplt »

Excellent script Musher0.

Un grand merci.

Médor

#33 Post by Médor »

Bonsoir Philippe,
augras wrote:Je suis étonné : après avoir lancé le script quand je compare l'indication de mémoire utilisée avec celle donnée par lxtask, ce dernier indique environ 300 Mo de moins !

EDIT : je crois que je me suis mal exprimé et que l'on ne comprend pas ce que je voulais dire ! Le script m'indique après nettoyage par exemple 800 Mo utilisés alors que lxtask m'indique 500 Mo. On est pas à quelques Mo mais là il est anormal que 2 outils aient une telle différence dans le calcul de la mémoire vive utilisée.
Voici l'explication :
http://a.michelizza.free.fr/pmwiki.php? ... dminMemory :
La commande free wrote: ...
Dans l'exemple ci-dessus, le système dispose en tout de 4054 Mo de mémoire.
Sur ce total, 3893 Mo sont utilisés et 161 Mo sont inutilisés.

A première vue, toute la mémoire est consommée et la machine est donc dans un état critique.
Pourtant, çe n'est pas du tout le cas.



Attention à ne pas confondre mémoire inutilisée et mémoire disponible !

Le système consomme un maximum de mémoire pour optimiser au mieux ses performances via l'utilisation de caches, et il n'y a donc que très peu de mémoire inutilisée (colonne free).
Mais la mémoire utilisée par les caches (colonnes buffers et cached) peut être libérée à tout moment.

La deuxième ligne indique la quantité de mémoire réellement consommée par les applications (colonne used) et la mémoire réellement disponible (colonne free) :
-/+ buffers/cache: ........ 390 ....... 3663

En cessant d'utiliser les caches, le système ne consommerait donc plus que 390 Mo de mémoire alors que 3663 Mo seraient disponibles.
Finalement, ce serveur a encore beaucoup de mémoire disponible en réserve !
...
Ici avec free je n'ai généralement, comme sur ma capture précédente, que 7 Mo de libre sur 238 Mo de ram ;)
Tu peux noter que dans LxTask il y a dans Affichage une case en principe cochée : Afficher la mémoire utilisée par le cache comme étant libre.
Htop ne donne les mêmes valeurs que LxTask.


Cordialement,
Médor.

musher0
Posts: 14629
Joined: Mon 05 Jan 2009, 00:54
Location: Gatineau (Qc), Canada

#34 Post by musher0 »

@augras

On peut traduire des champs avec awk, mais c'est beaucoup plus lent qu'avec
replaceit.

En modifiant la fonction FreeMem comme suit et en enlevant la ligne des chaînes
"replaceit" plus bas dans le script, on peut s'en passer, on y arrive, mais avec
lenteur ainsi qu'avec un problème de mise en forme à la ligne 3 (voir capture) :

Code: Select all

FreeMem () {
echo "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- .... -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=" >> $MMLBR
if [ ${LANG:0:2} = "fr" ];then
	echo "(En Mo)      total        utilisé      libre        partagé    tampons" > /tmp/mevlibr
	echo "`free -m | awk -F"  " 'NR=="2" { print "Mém.";for (i=2; i<=NF; i++) print $i" " }'| tr '\n' ' '`" >> /tmp/mevlibr
	echo "`free -m | awk -F"  " 'NR=="3" { print "±tampons";for (i=3; i<=NF; i++) print $i" " }'| tr '\n' ' '`" >> /tmp/mevlibr
	echo "`free -m | awk -F"  " 'NR=="4" { print "Éch. ";for (i=2; i<=NF; i++) print $i" " }'| tr '\n' ' '`" >> /tmp/mevlibr
else
	free -m | awk -F"  " 'NR=="1" { print "(In Mb)";for (i=2; i<=NF; i++) print $i" " }'| tr "\n" " " > /tmp/mevlibr
	echo >> /tmp/mevlibr
	free -m | tail -n 3 >> /tmp/mevlibr
fi
	cat /tmp/mevlibr >> $MMLBR;rm -f /tmp/mevlibr
echo . >> $MMLBR
}
On notera les deux façons de mettre la ligne awk, etc., en forme avec echo. J'ai
mis une 2e forme dans la partie anglaise.

Le problème, c'est qu'on ne sait pas combien d'espaces mettre à awk comme
séparateur de champs (le -F " "), parce que les résultats de free vont varier et
donc le remplissage entre les chiffres.

Je conserve la version avec replaceit, qui est beaucoup plus rapide et qui ne
bouscule pas la mise en forme.

Intéressante découverte par contre, cette possibilité de traduire des éléments de
texte avec awk exactement là où on veut dans un tableau. (Déduite à partir de :
http://www.theunixcode.com/2013/12/usin ... o-the-last,
le post de "Koullis" au milieu de la page.) Ça peut toujours servir.

À+

musher0
Attachments
Traduit-avec-awk_2015-02-01_18.10.59.jpg
Mise en forme déjantée à la ligne 3...
(46.15 KiB) Downloaded 336 times
musher0
~~~~~~~~~~
"You want it darker? We kill the flame." (L. Cohen)

musher0
Posts: 14629
Joined: Mon 05 Jan 2009, 00:54
Location: Gatineau (Qc), Canada

#35 Post by musher0 »

Salut, les gars !

Sous cette forme on gagne une seconde... de 4 à 3. (Voir archive ci-jointe.)

Renommez l'ancien fichier cleanup_memory cleanup_memory.vieux, faites un lien
symbolique de cleanup_memory3 à cleanup_memory, et ça va marcher comme
avant. Rien d'autre à changer.

Aussi une présentation de deux lignes plus compacte, mais pas la peine de mettre
une saisie d'écran juste pour ça.

Soyez prévenus que j'arrête là, avant de devenir tout à fait gaga !!!... :P :roll: :shock:
(Hé, les ricaneurs au fond de la salle : silence ! Je sais, c'est déjà commencé !!!) ;)

À+

musher0
Attachments
cleanup_memory3.zip
Dans cette version, on travaille davantage sur les chaînes directement en mémoire.
On économise ainsi le temps de plusieurs enregistrements transitoires sur disque.
Bravo à celui ou à celle qui a inventé &quot;echo -e $VARIABLE&quot; !
(1.41 KiB) Downloaded 391 times
musher0
~~~~~~~~~~
"You want it darker? We kill the flame." (L. Cohen)

Post Reply