Page 1 of 6

Posted: Sat 31 Jan 2015, 23:05
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.

Posted: Sat 31 Jan 2015, 23:12
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

Posted: Sat 31 Jan 2015, 23:36
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.

Posted: Sat 31 Jan 2015, 23:40
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 ! ;)

Posted: Sun 01 Feb 2015, 00:00
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.

Posted: Sun 01 Feb 2015, 03:22
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

Posted: Sun 01 Feb 2015, 09:20
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

Posted: Sun 01 Feb 2015, 09:38
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.

Posted: Sun 01 Feb 2015, 09:40
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

Posted: Sun 01 Feb 2015, 09:45
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

Posted: Sun 01 Feb 2015, 09:49
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.

Posted: Sun 01 Feb 2015, 09:56
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.

Posted: Sun 01 Feb 2015, 20:56
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

Posted: Sun 01 Feb 2015, 21:23
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.

Posted: Sun 01 Feb 2015, 21:52
by musher0
Vu. Merci de l'explication donnée là.

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

À+

musher0

Posted: Sun 01 Feb 2015, 21:56
by Médor
musher0 wrote:Bon, ben... retour à l'établi !
Je te fais confiance ;)

Cordialement,
Médor.

Posted: Sun 01 Feb 2015, 22:23
by jplt
Excellent script Musher0.

Un grand merci.

Posted: Sun 01 Feb 2015, 22:29
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.

Posted: Sun 01 Feb 2015, 23:33
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

Posted: Tue 03 Feb 2015, 04:00
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