SHELL de calcul conso mémoire

bluemantha Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -  
 DZ23 -
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   Statut Modérateur Dernière intervention   4 896
 
Salut,
ps -e c v | awk '{ print "Proces : ",$10,"|","PID : ",$1,"|","Mem : ",$9 }'
;-))
1
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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   Statut Modérateur Dernière intervention   4 896
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
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   Statut Modérateur Dernière intervention   4 896 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
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   Statut Contributeur Dernière intervention   295
 
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
totux
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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   Statut Contributeur Dernière intervention   295
 
arf...

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

Phiphi
0
bluemantha Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Modérateur Dernière intervention   4 896
 
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   Statut Membre Dernière intervention  
 
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   Statut Modérateur Dernière intervention   4 896
 
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   Statut Membre Dernière intervention  
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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   Statut Membre Dernière intervention  
 
ok merci beaucoup l'ami20j. :))
0
bluemantha Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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   Statut Membre Dernière intervention  
 
Ok merci l'ami20j
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
DZ23
 
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