SHELL de calcul conso mémoire

Fermé
bluemantha Messages postés 8 Date d'inscription vendredi 15 septembre 2006 Statut Membre Dernière intervention 21 septembre 2006 - 15 sept. 2006 à 16:58
 DZ23 - 5 juin 2009 à 15:20
Bonjour à tous,
je débute complet en shell Unix. J'ai besoin de calculer la conso mémoire de plusieurs process.

Je commence déjà par constituer un fichier avec
ps -e >liste_proc.lst

pour afficher la conso mémoire, il faut faire :
ps v num_pid

Comment puis je faire les 2 automatiquement, c'est à dire lire le fichier "liste_proc.lst" et pour chaque ligne (pid), calculer la conso.

Merci beaucoup pour vos réponses.
A voir également:

17 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
15 sept. 2006 à 20:24
Salut,
ps -e c v | awk '{ print "Proces : ",$10,"|","PID : ",$1,"|","Mem : ",$9 }'
;-))
1
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
21 sept. 2006 à 18:10
En attendant la soluce à lami20j, volià celle adaptée de ma 1ère solution :
ps -e c v | awk -v var="$(date '+%G-%m-%d %k-%M-%S')" '{ print "Date = "var,"|","Proces : ",$10,"|","PID : 1,"|","Mem : ",$9 }'
;-))
1
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
21 sept. 2006 à 18:24
Salut,

je crois qu'il n'y a rien à dire si ta soluce fonctionne.
C'était à peu près la même chose, mais avec perl.
Si je pouvais écrire une commande avec seulement quelque caratères, ça vallait le coup ;)

lami20j

P.S. ta commande me donne cette erreur
awk: line 1: syntax error at or near :
awk: line 1: runaway string constant ",$9 } ...

0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
21 sept. 2006 à 19:05
Salut,

Le problème c'est que ma commande pour notre ami bluemantha ne marche pas sous AIX ;-((

Donc il lui faut absolument avec Perl ;-))

Pour ton erreur, j'en sais rien, chez moi ça marche bien (Mandriva 2006) :-\
oups désolé, mais le copier/coller a mal marché (il manquait un guillemet, une virgule et un $) :-(((((((((((((((((
ps -e c v | awk -v var="$(date '+%G-%m-%d %k-%M-%S')" '{ print "Date = "var,"|","Proces : ",$10,"|","PID : ",$1,"|","Mem : ",$9 }'


:-))
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
21 sept. 2006 à 19:16
R,

(il manquait un guillemet, une virgule et un $

Pour le guillement et la virgule je suis d'acord.
Il ne fallait plutôt un au lieu de $ ?! :-)

Donc il lui faut absolument avec Perl
Bon je vois que je doit travailler un peu ;)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
21 sept. 2006 à 19:22
Il ne fallait plutôt un € au lieu de $ ?! :-)
;-D

Bon je vois que je doit travailler un peu ;)
Vi, au boulot faignasse ;-DDD

PS. T'as vu la FAQ ? (mise en forme Wiki)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
21 sept. 2006 à 19:32
Oups, j'ai oublié. Comme d'hab t'es plus rapide que moi :-)

j'ai regardé un peu aujourd'hui et j'ai remaqué.

Félicitations pour le travail ;)

La question que je me pose.
Celui qui écrit un tuto peux le faire lui même?

lami20j
0
Phiphi57 Messages postés 789 Date d'inscription samedi 26 février 2005 Statut Contributeur Dernière intervention 19 juillet 2009 295
15 sept. 2006 à 19:07
Salut,

déja, tu as "awk" qui permet de faire qques petits trucs sympa :
teste :

ps -e | awk '{print $1}'
ps -e | awk '{print $4}'
ps -e | awk '{print $1 "   " $4}'

je suis sur que ca va t'aider un peu...

ensuite, si tu utilises zsh, tu peux faire des boucles "for"...
du genre, mais là je suis pas sûr de mon coup :
for process in `ps -e | awk '{print $1 "   " $4}'` 
do
nom=`echo $process | awk '{print $2}'`
conso=`ps -v `echo $process | awk '{print $1}'` `
echo $nom $conso
done


c'est sans doute crado, je suis pas sur que ca marche, mais dans l'esprit, ca doit pas etre trop loin...

Phiphi
0
salut ,je pense qu'il y a plus simple que le gawk :

top -c -n 1 -b
ou mieux
ps -eo pid,%cpu,%mem,args
ps -eo %mem,pid,args
...
tu pourras choisir la/les colonne/s que tu veux sans utiliser le gawk
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
15 sept. 2006 à 19:20
Salut,

sans fichier temporaire
ps -e | perl -ne '/(\d+)/ and system ("ps","v",$1)' > resultat
lami20j
0
Phiphi57 Messages postés 789 Date d'inscription samedi 26 février 2005 Statut Contributeur Dernière intervention 19 juillet 2009 295
15 sept. 2006 à 20:17
arf...

je me doutais bien que c'etait crado ce que je proposais...
:'(

Phiphi
0
bluemantha Messages postés 8 Date d'inscription vendredi 15 septembre 2006 Statut Membre Dernière intervention 21 septembre 2006
18 sept. 2006 à 14:11
Hello,

d'abord, merci à tous pour vos réponses.

Vos solutions fonctionnent bien. J'ai utilisé celle de Jipicy (donc merci beaucoup Jipicy). Effectivement ce n'est pas la peine de passer par un fichier temp.

Solution super.

Bonne journée à tous.
0
bluemantha Messages postés 8 Date d'inscription vendredi 15 septembre 2006 Statut Membre Dernière intervention 21 septembre 2006
19 sept. 2006 à 10:58
Aïe !

ca marche sous linux mais pas sous Aix. Je vais donc essayer de passer par un fichier temp.

A moins que vous ayez une meilleure idée ... .
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
19 sept. 2006 à 11:00
C'est où que ça coince sous AIX ?

Décompose la ligne de commande et dis-nous ce qu'AIX n'aime pas, on devrait pouvoir adapter...

;-))
0
bluemantha Messages postés 8 Date d'inscription vendredi 15 septembre 2006 Statut Membre Dernière intervention 21 septembre 2006
19 sept. 2006 à 11:16
en fait, la même commande ps -e c v fonctionne bien sous linux redhat4 mais pas sous Aix où il me renvoit à l'aide sur la commande ps.

??
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
19 sept. 2006 à 11:23
Regarde là peut être : http://www.open4host.com/faq/index.php?action=artikel&cat=13&id=88&artlang=it
AIX FORMAT DESCRIPTORS
This ps supports AIX format descriptors, which work somewhat like the formatting codes of printf(1) and printf(3). For example, the normal default output can be produced with this: ps -eo "%p %y %x %c" 

 

CODE NORMAL HEADER
  
%C pcpu %CPU
  
%G group GROUP
  
%P ppid PPID
  
%U user USER
  
%a args COMMAND
  
%c comm COMMAND
  
%g rgroup RGROUP
  
%n nice NI
  
%p pid PID
  
%r pgid PGID
  
%t etime ELAPSED
  
%u ruser RUSER
  
%x time TIME
  
%y tty TTY
  
%z vsz VSZ
;-))
0
bluemantha Messages postés 8 Date d'inscription vendredi 15 septembre 2006 Statut Membre Dernière intervention 21 septembre 2006
19 sept. 2006 à 17:12
hello,
finalement, j'ai essayé avec la solution Perl de l'ami20j et là j'obtiens ce que je veux.
Il me reste juste une chose, je souhaite rajouter en début de chaque ligne du fichier résultat la date system au format YYYYMMDDHHMISS.

Auriez vous une idée ?
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
20 sept. 2006 à 12:48
Hello,

je te ferrai le script ce soir ou la ligne de commande si tu la préfères.
je n'ai pas linux au boulot, donc je ne peux pas tester.

lami20j
0
bluemantha Messages postés 8 Date d'inscription vendredi 15 septembre 2006 Statut Membre Dernière intervention 21 septembre 2006
21 sept. 2006 à 10:48
ok merci beaucoup l'ami20j. :))
0
bluemantha Messages postés 8 Date d'inscription vendredi 15 septembre 2006 Statut Membre Dernière intervention 21 septembre 2006
21 sept. 2006 à 10:57
résultat des courses,

j'ai la commande suivante:

ps -e |perl -ne '/(\d+)/ and system ("ps","v",$1)'|grep ora|awk '{system("echo `date +%C%y%m%d%H%M%S`");print " "$7-$10" "$13)' >resultat.lst

Ca marche bien mais ca s'affiche sur 2 lignes:
ex:
20060921093233
7849 oraPMON

et il me le faudrait sur une seule ligne.

merci :)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
21 sept. 2006 à 11:38
Salut,

Oups, j'ai oublié pour hier soir.
Pour ce que je pense je ne vais pas utiliser grep ou awk mais seulement perl.

C'est promis pour ce soir.

lami20j
0
bluemantha Messages postés 8 Date d'inscription vendredi 15 septembre 2006 Statut Membre Dernière intervention 21 septembre 2006
21 sept. 2006 à 11:39
Ok merci l'ami20j
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
21 sept. 2006 à 20:29
Re,

pas jolie, mais enfin si ça marche ... ;)
ps -e v c |  perl -ne '@t=split /\s+/,$_;@d=localtime;$d[5]+=1900;$d[4]+=1;printf ("%02d-%02d-%02d %02d:%02d:%02d",@d[3,4,5,2,1,0]);print " | $t[10] | $t[1] | $t[9]\n";' 
lami20j

P.S. C'est une seule ligne
0
Bonjour,

Merci pour ces belles réponses, pouvez-vous m'expliquez comment je pourrez faire la somme du résultat d'un fichier de memoire.

cdt,
DZ23
0