Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/04/2021, à 13:15

Tawal

Processus Swapés - script

Hello,

En suivant les conseils avisés de Watael ,
je reprends ici le sujet de mon post dans [Vos Scripts Utiles] ... mon post

Il est donc question d'un petit script affichant les processus swapés ainsi que leurs pids et volumes occupés respectifs.

En dernier lieu, Watael m'avait suggéré ceci :

Watael a écrit :

PS: le tri se fait alors sur la valeur du tableau, plus sur l'indice.
PS2 : j'essaie de faire des tests, mais ma machine ne swap pas. sad

$ awk 'BEGIN{PROCINFO["sorted_in"]="@val_num_desc"; units["kB"]=1024; units["mB"]=1024**2; units[gB]=1024**3}/^Name/{name=$2}; /^Tgid/{tgid=$2}; /^VmSwap/{byteSize=$2*units[3]; procName[tgid]=name; procSwap[tgid]=byteSize}END{for(i in procSwap)print procName[i],bytes2human(procSwap[i]) }' /proc/*/status

il faut encore créer la fonction bytes2human() pour rendre le nombre d'octets lisible par un humain

Est-il besoin de rappeler que je suis bien novice concernant awk (et même bash roll) ?
Mais voici ce que j'ai fait (encore à la barbare ...) : Voici ce que Watael a proposé :

#!/bin/bash

gawk 'function b2h(mem,    x){
        m=mem
        while(int(m/=ko))x++
        return x
    }
    BEGIN{
        ko=1000
        unit2exp["kB"]=ko**1; unit2exp["mB"]=ko**2; unit2exp["gB"]=ko**3
        exp2unit[1]="ko";     exp2unit[2]="Mo";     exp2unit[3]="Go"
    }
    END{
        PROCINFO["sorted_in"]="@val_num_desc";
        printf("%-18s %5s %11s\n\n", "NOM", "PID", "TAILLE")
        for(pid in procSwap){
            sizeSwap=procSwap[pid]
            xp=b2h(sizeSwap)
            if(xp==1){
               printf("%-18s %5d %8d %s\n", procName[pid], pid, sizeSwap/ko^xp, exp2unit[xp])
            }
            else{
                printf("%-18s %5d %8.1f %s\n", procName[pid], pid, sizeSwap/ko^xp, exp2unit[xp])
            }
        }
        xp=b2h(totSwap)
        if(xp==1){
            printf("\nVolume occupé en Swap : %d %s\n\n",totSwap/ko^xp, exp2unit[xp])
        }
        else{
            printf("\nVolume occupé en Swap : %.1f %s\n\n",totSwap/ko^xp, exp2unit[xp])
        }
    }
    /^Name:/{
        name=$2
    }
    /^Tgid:/{
        tgid=$2
    }
    /^VmSwap:/ && $2>0 {
        byteSize=$2*unit2exp[$3]; procName[tgid]=name; procSwap[tgid]=byteSize; totSwap+=byteSize
    }' /proc/[0-9]*/status 2>/dev/null

exit $?

C'est fonctionnel, même si je pressens que c'est pas optimum. (maintenant ça l'est)
J'ai fait fait "swaper" ma machine en démarrant une VM pour avoir un retour parlant :

$ procswap
NOM                  PID      TAILLE

lightdm              925      172 ko
evolution-alarm     1674      132 ko
at-spi-bus-laun     3365      132 ko
NetworkManager       790      112 ko
needrestart-dbu     2018      108 ko
polkitd              902       96 ko
lightdm             1437       92 ko
dconf-service       2126       80 ko
xfce4-session       1495       76 ko
gsd-disk-utilit     1624       72 ko
cups-browsed         892       56 ko
package-update-     1894       56 ko
udisksd              787       40 ko
Thunar              1579       40 ko
gnome-keyring-d     1567       32 ko
evolution-addre     2133       32 ko
accounts-daemon      784       28 ko
xfsettingsd         1575       28 ko
rsyslogd             791       24 ko
Xorg                 937       24 ko
xfce4-power-man     1685       24 ko
avahi-daemon         785       16 ko
xfconfd             1499       16 ko
xfwm4               1572       16 ko
upowerd             1582       12 ko
devilspie           1628       12 ko
applet.py           1832       12 ko
nm-applet           1885       12 ko
gvfsd               1585        8 ko
xfce4-notifyd       1684        8 ko
polkit-gnome-au     1869        8 ko
dbus-daemon          786        4 ko
smartd               799        4 ko
systemd-logind       803        4 ko
gvfs-gphoto2-vo     2002        4 ko

Volume occupé en Swap : 1.6 Mo
$

Tout conseils, critiques, suggestions ou autres sont les bienvenus smile

Merci à vous.

Edit:
Ajout de la redirection des erreurs d'awk
Ajout de l'exit $?
(oublis de ma part)

Edit2:
Amélioration du glob de recherche d'awk. Merci pour ton lien bruno
(/proc/*/status ---> /proc/[0-9]*/status)

Edit3:
Changement awk par gawk (ne fonctionne pas [sur le tri] sans gawk)

Edit4: Correction erreur (redirection). Merci geole
Edit5: Mise à jour du script (revu et corrigé par Watael)

Dernière modification par Tawal (Le 21/04/2021, à 19:34)


Le savoir n'a d’intérêt que si on le transmet.
Ubuntu-Mate 20.04.2 LTS Virtualisée
Useless Use of Cat Award

Hors ligne

#2 Le 20/04/2021, à 13:58

bruno

Re : Processus Swapés - script

À comparer avec :
https://sleeplessbeastie.eu/2016/12/26/ … wap-space/

Il y a aussi la commande smem (paquet du même nom).

Dernière modification par bruno (Le 20/04/2021, à 13:59)


Sur ce dont on ne peut pas parler, il convient de garder le silence.

Hors ligne

#3 Le 20/04/2021, à 14:22

geole

Re : Processus Swapés - script

Bonjour
Voici un autre retour

PROCESSUS            PID      SWAPED
gvfs-gphoto2-vo     1574      614 Ko
gvfsd-fuse          1292      913 Ko
kerneloops           766       61 Ko
Xorg                1276      6,5 Mo
cupsd                676      147 Ko
gvfs-afc-volume     1556      655 Ko
at-spi-bus-laun     1450      552 Ko
polkitd              560      380 Ko
fwupd               7223      299 Ko
cups-browsed         699      204 Ko
mount.ntfs          1351       20 Ko
goa-daemon          1537      6,2 Mo
tracker-miner-f     1257      6,2 Mo
gdm-x-session       1272      536 Ko
rpc.mountd           715      5,3 Mo
rtkit-daemon        1262        8 Ko
freshclam            758      167 Ko
cron                 492        4 Ko
systemd-timesyn      405       57 Ko
accounts-daemon      468      307 Ko
gnome-shell         1519     14,3 Mo
mount.ntfs          1198       16 Ko
udisksd              580      569 Ko
colord              1822      921 Ko
ModemManager         693      225 Ko
gdm-session-wor     1238      323 Ko
dbus-daemon          509      212 Ko
rpcbind              398        8 Ko
gvfs-goa-volume     1531      442 Ko
systemd             1245      1,1 Mo
goa-identity-se     1550      1,1 Mo
NetworkManager       516      421 Ko
gnome-keyring-d     1264      544 Ko
mount.ntfs          1223        8 Ko
switcheroo-cont      573       36 Ko
unattended-upgr      714      1,6 Mo
mount.ntfs          1210       12 Ko
mount.ntfs          1078       12 Ko
upowerd             1578      167 Ko
(sd-pam)            1246      638 Ko
dbus-daemon         1455      258 Ko
pulseaudio          1255      2,1 Mo
systemd-logind       576       36 Ko
mount.ntfs          1199        8 Ko
mount.ntfs          1323       16 Ko
avahi-daemon         602       24 Ko
wpa_supplicant       581       32 Ko
dbus-daemon         1260      208 Ko
systemd-resolve      403      729 Ko
mount.ntfs          1341       49 Ko
gvfs-udisks2-vo     1293      1,1 Mo
systemd-udevd        347      811 Ko
gvfs-mtp-volume     1562      421 Ko
gvfsd               1277      507 Ko
gnome-session-c     1498      483 Ko
snapd                572      1,7 Mo
gnome-session-b     1506      1,4 Mo
irqbalance           552        8 Ko
gdm3                1233      667 Ko
mount.ntfs          1218       20 Ko
smartd               571      212 Ko
networkd-dispat      555      1,6 Mo
rsyslogd             567      184 Ko

Total en Swap : 64,7 Mo
 

Peut-être ajouter un tri sur le 4eme paramètre puis le 3eme
A comparer à ce retour

find /proc -maxdepth 2 -path "/proc/[0-9]*/status" -readable -exec awk -v FS=":" '{process[$1]=$2;sub(/^[ \t]+/,"",process[$1]);} END {if(process["VmSwap"] && process["VmSwap"] != "0 kB") printf "%10s %-30s %20s\n",process["Pid"],process["Name"],process["VmSwap"]}' '{}' \;
       347 systemd-udevd                                792 kB
       398 rpcbind                                        8 kB
       403 systemd-resolve                              712 kB
       405 systemd-timesyn                               56 kB
       468 accounts-daemon                              300 kB
       492 cron                                           4 kB
       509 dbus-daemon                                  208 kB
       516 NetworkManager                               412 kB
       552 irqbalance                                     8 kB
       555 networkd-dispat                             1572 kB
       560 polkitd                                      372 kB
       567 rsyslogd                                     180 kB
       571 smartd                                       208 kB
       572 snapd                                       1696 kB
       573 switcheroo-cont                               36 kB
       576 systemd-logind                                36 kB
       580 udisksd                                      556 kB
       581 wpa_supplicant                                32 kB
       602 avahi-daemon                                  24 kB
       676 cupsd                                        144 kB
       693 ModemManager                                 220 kB
       699 cups-browsed                                 200 kB
       714 unattended-upgr                             1572 kB
       715 rpc.mountd                                  5216 kB
       758 freshclam                                    164 kB
       766 kerneloops                                    60 kB
      1078 mount.ntfs                                    12 kB
      1198 mount.ntfs                                    16 kB
      1199 mount.ntfs                                     8 kB
      1210 mount.ntfs                                    12 kB
      1218 mount.ntfs                                    20 kB
      1223 mount.ntfs                                     8 kB
      1233 gdm3                                         652 kB
      1238 gdm-session-wor                              316 kB
      1245 systemd                                     1116 kB
      1246 (sd-pam)                                     624 kB
      1255 pulseaudio                                  2036 kB
      1257 tracker-miner-f                             6092 kB
      1260 dbus-daemon                                  204 kB
      1262 rtkit-daemon                                   8 kB
      1264 gnome-keyring-d                              532 kB
      1272 gdm-x-session                                524 kB
      1276 Xorg                                        6300 kB
      1277 gvfsd                                        496 kB
      1292 gvfsd-fuse                                   892 kB
      1293 gvfs-udisks2-vo                             1112 kB
      1323 mount.ntfs                                    16 kB
      1341 mount.ntfs                                    48 kB
      1351 mount.ntfs                                    20 kB
      1450 at-spi-bus-laun                              540 kB
      1455 dbus-daemon                                  252 kB
      1498 gnome-session-c                              472 kB
      1506 gnome-session-b                             1412 kB
      1519 gnome-shell                                14012 kB
      1531 gvfs-goa-volume                              432 kB
      1537 goa-daemon                                  6076 kB
      1550 goa-identity-se                             1100 kB
      1556 gvfs-afc-volume                              640 kB
      1562 gvfs-mtp-volume                              412 kB
      1574 gvfs-gphoto2-vo                              600 kB
      1578 upowerd                                      164 kB
      1822 colord                                       900 kB
      7223 fwupd                                        292 kB

Dernière modification par geole (Le 20/04/2021, à 14:28)

Hors ligne

#4 Le 20/04/2021, à 14:28

Tawal

Re : Processus Swapés - script

Très intéressant bruno wink
L'usage d'awk est assez similaire mais en bien plus concis (efficace) ! Je vais m'en inspirer. Merci smile

Par contre, un simple test avec time sur le 1er exemple de ton lien (donc sans tri, ni conversion d'unité) est assez probant pour ma "watael-mouture" :

$ time find /proc -maxdepth 2 -path "/proc/[0-9]*/status" -readable -exec awk -v FS=":" '{process[$1]=$2;sub(/^[ \t]+/,"",process[$1]);} END {if(process["VmSwap"] && process["VmSwap"] != "0 kB") printf "%10s %-30s %20s\n",process["Pid"],process["Name"],process["VmSwap"]}' '{}' \;
....
real	0m2,366s
user	0m0,846s
sys	0m1,258s
$
$ time procswap
...
real	0m0,074s
user	0m0,041s
sys	0m0,029s
$

Pour le paquet smem, je ne le connaissais pas, je vais voir ça wink

Edit: en fait, les 2 méthodes diffèrent sur le principe :
- avec find, awk est lancé à chaque fichier trouvé par find --> un awk ne s'appliquant qu'au flux de ce fichier. (réinitialisé à chaque fichier)
-avec awk seul, les instructions s'appliquent sur le flux de tous les fichiers trouvés par le glob.

Rajout au script de la redirection des erreurs d'awk et rajout de l'exit $? (oubli de ma part)

Dernière modification par Tawal (Le 20/04/2021, à 14:49)


Le savoir n'a d’intérêt que si on le transmet.
Ubuntu-Mate 20.04.2 LTS Virtualisée
Useless Use of Cat Award

Hors ligne

#5 Le 20/04/2021, à 14:55

Tawal

Re : Processus Swapés - script

@geole:
Ton retour de mon script n'est pas trié car awk utilise ici des spécificités à gawk.
Si tu installes gawk, le retour sera trié wink


Le savoir n'a d’intérêt que si on le transmet.
Ubuntu-Mate 20.04.2 LTS Virtualisée
Useless Use of Cat Award

Hors ligne

#6 Le 20/04/2021, à 16:28

Tawal

Re : Processus Swapés - script

@bruno:
Pour le paquet smem, c'est raté du coté swap :

man smem a écrit :

Description
smem reports physical memory usage, taking shared memory pages into account. Unshared memory is reported as the USS (Unique Set Size). Shared memory is divided evenly among the processes sharing that memory. The unshared memory (USS) plus a process's proportion of shared memory is reported as the PSS (Proportional Set Size). The USS and PSS only include physical memory usage. They do not include memory that has been swapped out to disk.

Donc mon script a toute sa raison d'être smile


Le savoir n'a d’intérêt que si on le transmet.
Ubuntu-Mate 20.04.2 LTS Virtualisée
Useless Use of Cat Award

Hors ligne

#7 Le 20/04/2021, à 16:38

bruno

Re : Processus Swapés - script

Cela ne veut pas dire que smem n'affiche pas la partie en swap et d'ailleurs il le fait :

smem command -c "pid command swap" --sort=swap -r

Sur ce dont on ne peut pas parler, il convient de garder le silence.

Hors ligne

#8 Le 20/04/2021, à 17:53

geole

Re : Processus Swapés - script

Un retour

PROCESSUS            PID      SWAPED
gnome-shell         1519     92.9 Mo
evolution-alarm     1794     16.3 Mo
rpc.mountd           715     14.1 Mo
ibus-extension-     1613     13.7 Mo
smart-notifier      1777     10.8 Mo
gsd-keyboard        1712     10.1 Mo
Xorg                1276      9.9 Mo
ibus-x11            1617      9.9 Mo
gsd-wacom           1750      9.5 Mo
gsd-power           1724      9.1 Mo
gsd-color           1709      8.4 Mo
gsd-media-keys      1716      8.0 Mo
gsd-xsettings       1755      6.1 Mo
tracker-miner-f     1257      6.1 Mo
goa-daemon          1537      5.8 Mo
snapd                572      5.1 Mo
gjs                 1693      5.0 Mo
networkd-dispat      555      4.4 Mo
unattended-upgr      714      4.3 Mo
evolution-calen     1653      3.8 Mo
gnome-shell-cal     1638      3.6 Mo
evolution-addre     1665      3.3 Mo
evolution-sourc     1644      2.8 Mo
xbindkeys           1852      2.7 Mo
colord              1822      2.6 Mo
systemd-udevd        347      2.3 Mo
systemd-resolve      403      2.2 Mo
pulseaudio          1255      2.1 Mo
gsd-printer         1821      2.1 Mo
gsd-datetime        1710      1.7 Mo
gnome-session-b     1356      1.7 Mo
gdm3                1233      1.7 Mo
snap-store          1867      1.7 Mo
gnome-session-b     1506      1.5 Mo
ibus-daemon         1608      1.5 Mo
udisksd              580      1.4 Mo
NetworkManager       516      1.2 Mo
systemd             1245      1.2 Mo
gdm-session-wor     1238      1.2 Mo
gvfs-udisks2-vo     1293      1.1 Mo
goa-identity-se     1550      1.1 Mo
gsd-disk-utilit     1761      1.1 Mo
systemd-journal      282      1.1 Mo
gvfsd-trash         1694      974 Ko
gvfsd-fuse          1292      933 Ko
accounts-daemon      468      929 Ko
gsd-print-notif     1725      913 Ko
freshclam            758      868 Ko
ibus-engine-sim     1776      827 Ko
gsd-sharing         1730      811 Ko
gsd-sound           1741      811 Ko
ibus-memconf        1612      778 Ko
gnome-keyring-d     1264      724 Ko
ModemManager         693      720 Ko
gdm-x-session       1272      712 Ko
cups-browsed         699      708 Ko
smartd               571      684 Ko
gsd-smartcard       1738      679 Ko
(sd-pam)            1246      659 Ko
gvfs-afc-volume     1556      655 Ko
xdg-permission-     1633      647 Ko
gsd-wwan            1754      643 Ko
gvfs-gphoto2-vo     1574      610 Ko
at-spi-bus-laun     1450      548 Ko
upowerd             1578      548 Ko
gvfsd               1277      520 Ko
rsyslogd             567      495 Ko
cupsd                676      495 Ko
gnome-session-c     1498      479 Ko
at-spi2-registr     1629      458 Ko
dbus-daemon          509      446 Ko
gsd-usb-protect     1745      446 Ko
gvfs-goa-volume     1531      442 Ko
polkitd              560      438 Ko
ssh-agent           1425      430 Ko
ibus-portal         1620      430 Ko
gvfs-mtp-volume     1562      417 Ko
gsd-housekeepin     1711      401 Ko
gsd-a11y-settin     1706      360 Ko
gsd-rfkill          1726      360 Ko
xdg-document-po     1887      339 Ko
kerneloops           766      286 Ko
systemd-logind       576      274 Ko
dbus-daemon         1455      270 Ko
systemd-timesyn      405      266 Ko
gsd-screensaver     1727      258 Ko
dbus-daemon         1260      241 Ko
dconf-service       1662      225 Ko
mount.ntfs          1341      204 Ko
wpa_supplicant       581      163 Ko
switcheroo-cont      573      159 Ko
avahi-daemon         602       90 Ko
mount.ntfs          1323       90 Ko
rpcbind              398       73 Ko
mount.ntfs          1218       65 Ko
mount.ntfs          1351       61 Ko
mount.ntfs          1198       57 Ko
mount.ntfs          1078       53 Ko
mount.ntfs          1199       53 Ko
mount.ntfs          1210       53 Ko
mount.ntfs          1223       53 Ko
systemd                1       36 Ko
irqbalance           552       36 Ko
avahi-daemon         489       32 Ko
cron                 492       28 Ko
rtkit-daemon        1262       28 Ko
blkmapd              311       16 Ko
rpc.idmapd           395       12 Ko
acpid                470        4 Ko

Total en Swap : 322.9 Mo

Dernière modification par geole (Le 21/04/2021, à 10:00)

Hors ligne

#9 Le 20/04/2021, à 19:58

Tawal

Re : Processus Swapés - script

Merci geole, c'est corrigé wink

@bruno
On n'a pas du tout le même retour :

$ smem command -c "pid command swap" --sort=swap -r
  PID Command                         Swap 
 1971 /usr/lib/evolution/evolutio       28 
 3365 /usr/lib/at-spi2-core/at-sp       24 
 1585 /usr/lib/gvfs/gvfsd               24 
 1684 /usr/lib/x86_64-linux-gnu/x        8 
 9065 /usr/bin/python /usr/bin/sm        0 
 8871 bash                               0 
 7224 /usr/lib/virtualbox/VBoxSVC        0 
 7218 /usr/lib/virtualbox/VBoxXPC        0 
 7184 /usr/lib/virtualbox/Virtual        0 
 4911 bash                               0 
 4907 xfce4-terminal                     0 
 3754 /usr/lib/firefox-esr/firefo        0 
 3629 /usr/lib/firefox-esr/firefo        0 
 3609 /usr/lib/firefox-esr/firefo        0
....
$ procswap
PROCESSUS            PID      SWAPED
dbus-daemon          786       94 Ko
packagekitd         5926       45 Ko
evolution-sourc     1971       28 Ko
gvfsd               1585       24 Ko
at-spi-bus-laun     3365       24 Ko
unattended-upgr      914       16 Ko
xfce4-notifyd       1684        8 Ko
(sd-pam)            1444        4 Ko

Total en Swap : 245 Ko

Je ne sais quoi en penser étant donné que je connais pas smem.

Edit:
Je pense que smem ne regarde pas toutes les parties de mémoire en swap.
Ce que je souligne au #6
Du coup, certains processus sont invisibles pour smem et certains processus ne comptent pas toute leur occupation du swap.
Un autre retour (je supprime les retour à 0 du swap de smem) :

$ time smem command -c "pid command swap" --sort=swap -r | awk '$NF!=0 {print $0}'
  PID Command                         Swap 
 1971 /usr/lib/evolution/evolutio      564 
 3365 /usr/lib/at-spi2-core/at-sp      560 
 1585 /usr/lib/gvfs/gvfsd              432 
 1684 /usr/lib/x86_64-linux-gnu/x       92 

real	0m3,066s
user	0m2,726s
sys	0m0,315s
$ time procswap
PROCESSUS            PID      SWAPED
Xorg                 937      970 Ko
lightdm              925      860 Ko
evolution-sourc     1971      577 Ko
at-spi-bus-laun     3365      573 Ko
gvfsd               1585      442 Ko
dbus-daemon          786      282 Ko
unattended-upgr      914      274 Ko
NetworkManager       790      143 Ko
xfce4-notifyd       1684       98 Ko
(sd-pam)            1444       40 Ko
upowerd             1582       36 Ko
alsactl              794       16 Ko
cups-browsed         892       16 Ko
accounts-daemon      784       12 Ko
cupsd                801       12 Ko
systemd-timesyn      751        8 Ko
udisksd              787        8 Ko

Total en Swap : 4.4 Mo

real	0m0,049s
user	0m0,024s
sys	0m0,012s
$

Dernière modification par Tawal (Le 20/04/2021, à 20:14)


Le savoir n'a d’intérêt que si on le transmet.
Ubuntu-Mate 20.04.2 LTS Virtualisée
Useless Use of Cat Award

Hors ligne

#10 Le 21/04/2021, à 01:55

Watael

Re : Processus Swapés - script

il ne s'agit pas de Ko (1024 octets) mais de kB (1000 octets).

#!/usr/bin/awk -f

function b2h(mem,    x){
    m=mem
    while(int(m/=kb))x++
    return x
}
BEGIN{
    kb=1000; Ko=1024
    unit2exp["kB"]=kb**1; unit2exp["mB"]=kb**2; unit2exp["gB"]=kb**3
    exp2unit[1]="kB";     exp2unit[2]="mB";     exp2unit[3]="gB"
}
END{
    PROCINFO["sorted_in"]="@val_num_desc";
    printf("\n%-20s %-8s %-8s\n\n", "NAME", "PID", "SIZE")
#    for(pid in procSize){
#        size=procSize[pid]
    for(pid in procSwap){
        size=procSwap[pid]
        xp=b2h(size)
        printf("%-20s %-8d %.1f %s\n", procName[pid], pid, size/kb^xp, exp2unit[xp])
    }
    xp=b2h(totSize)
    printf("\ntotal Size: %.1f %s\n\n",totSize/kb^xp, exp2unit[xp])
}
/^Name:/{
    name=$2
}
/^Tgid:/{
    tgid=$2
}
#/^VmSize:/{
#    byteSize=$2*unit2exp[$3]; procName[tgid]=name; procSize[tgid]=byteSize; totSize+=byteSize
#}
/^VmSwap:/ && $2>0 {
    byteSize=$2*unit2exp[$3]; procName[tgid]=name; procSwap[tgid]=byteSize; totSwap+=byteSize
}

Welcome to sHell. · eval is evil.

Hors ligne

#11 Le 21/04/2021, à 13:03

Tawal

Re : Processus Swapés - script

Pour les unités, il me semblait bien (mais j'ai préféré vérifier) que 1ko = 1kB = 1000 octets.
Par contre 1kio = 1kiB = 1024 octets.
Dans le S.I. le symbole k vaut toujours 10^3 quelle que soit l'unité à la laquelle il s'applique.
Mais il y a encore beaucoup de confusion et de mauvaises utilisations (même des constructeurs).
source
Ça n'empêche pas que j'ai fait l'erreur de multiplier par 1024 au lieu de 1000 roll

Pour le script awk, whaouu ! quelle logique !
Et tu me montres carrément ce que tu voulais que je comprenne ici
Tu t'assures de convertir correctement la valeur swapée selon son unité dans le fichier status.
Même si l'unité sera toujours kB (je crois) dans le fichier status. Je n'en ai jamais vu d'autres mais je n'ai pas de source pour le confirmer.
En tout cas, ce que tu me montres est pour moi une mine d'informations, de syntaxes et de concepts. MERCI

Je garde la justification à droite pour les PID et la valeur Swapée et son Unité .
Je garde aussi la valeur sans virgule pour les unités kB.

PS : Il y a quelques erreurs (d'étourderie je pense) : il manque une } fermante dans la boucle for commentée et tu affiches totSize à la place de totSwap mais bon, beau travail !

Dernière modification par Tawal (Le 21/04/2021, à 13:27)


Le savoir n'a d’intérêt que si on le transmet.
Ubuntu-Mate 20.04.2 LTS Virtualisée
Useless Use of Cat Award

Hors ligne

#12 Le 21/04/2021, à 13:25

Watael

Re : Processus Swapés - script

je n'ai commenté que les deux premières lignes de la boucle, le reste étant identique.


Welcome to sHell. · eval is evil.

Hors ligne

#13 Le 21/04/2021, à 14:32

Tawal

Re : Processus Swapés - script

Une autre question :
Tu as mis un shebang pointant vers /usr/bin/awk.
Pour en faire un commande simple (du genre procswap), vaut-il mieux utiliser un alias  ? :

alias procswap='script-awk /proc/[0-9]*/status 2>/dev/null'

En ayant donné les droits d'exécution et placé le script-awk dans un dossier du PATH.
Ou vaut-il mieux utiliser le shebang #!/bin/bash et mettre la commande gwak entière (avec redirection) ?

Je me permets de donner mon avis :
Vu que ce script awk ne peut s'appliquer qu'à un seul cas, il n'est pas nécessaire de l'avoir en script extérieur.

En te remerciant.


Le savoir n'a d’intérêt que si on le transmet.
Ubuntu-Mate 20.04.2 LTS Virtualisée
Useless Use of Cat Award

Hors ligne

#14 Le 21/04/2021, à 17:37

Watael

Re : Processus Swapés - script

je vote pour l'alias. intuitivement.


Welcome to sHell. · eval is evil.

Hors ligne

#15 Le 21/04/2021, à 17:55

geole

Re : Processus Swapés - script

Juste une question.
On parle d'un petit script.
Pour l'exécuter, je fais de cette façon.
1) Copie du script dans le forum.
2) Ouverture d'un terminal en frappant Crtl Alt t
3) Coller
4) Je constate  alors que le terminal se ferme automatiquement sans que je puisse voir quoique ce soit!


Pour  résoudre le problème, je dois faire très attention à ne pas sélectionner la première ligne et surtout la dernière!
J'ai nommé

#!/bin/bash

exit $?

Dernière modification par geole (Le 21/04/2021, à 17:56)

Hors ligne

#16 Le 21/04/2021, à 17:58

Tawal

Re : Processus Swapés - script

Ok merci.
Je mets ça en place wink

Voici ce que j'ai fait (ou plutôt ce que j'en ai fait ...)

#!/usr/bin/awk -f

function b2h(mem,    x){
    m=mem
    while(int(m/=ko))x++
    return x
}
BEGIN{
    ko=1000
    unit2exp["kB"]=ko**1; unit2exp["mB"]=ko**2; unit2exp["gB"]=ko**3
    exp2unit[1]="ko";     exp2unit[2]="Mo";     exp2unit[3]="Go"
}
END{
    PROCINFO["sorted_in"]="@val_num_desc";
    printf("%-18s %5s %11s\n\n", "NOM", "PID", "TAILLE")
    for(pid in procSwap){
        sizeSwap=procSwap[pid]
        xp=b2h(sizeSwap)
        if(xp==1){
           printf("%-18s %5d %8d %s\n", procName[pid], pid, sizeSwap/ko^xp, exp2unit[xp])
        }
        else{
            printf("%-18s %5d %8.1f %s\n", procName[pid], pid, sizeSwap/ko^xp, exp2unit[xp])
        }
    }
    xp=b2h(totSwap)
    if(xp==1){
        printf("\nVolume occupé en Swap : %d %s\n\n",totSwap/ko^xp, exp2unit[xp])
    }
    else{
        printf("\nVolume occupé en Swap : %.1f %s\n\n",totSwap/ko^xp, exp2unit[xp])
    }
}
/^Name:/{
    name=$2
}
/^Tgid:/{
    tgid=$2
}
/^VmSwap:/ && $2>0 {
    byteSize=$2*unit2exp[$3]; procName[tgid]=name; procSwap[tgid]=byteSize; totSwap+=byteSize
}

J'ai juste changé la mise en forme et enlevé la virgule pour les unités en ko.
Et j'ai changé les "kB, mB et gB" en "ko, Mo et Go" juste pour t'embêter lol

Non, franchement merci de ce gros coup de main (t'as tout fait !).


Le savoir n'a d’intérêt que si on le transmet.
Ubuntu-Mate 20.04.2 LTS Virtualisée
Useless Use of Cat Award

Hors ligne

#17 Le 21/04/2021, à 18:01

geole

Re : Processus Swapés - script

Cela commence mal......

a@b:~$ #!/usr/bin/awk -f
a@b:~$ 
a@b:~$ function b2h(mem,    x){
bash: erreur de syntaxe près du symbole inattendu « mem, »
a@b:~$     m=mem
a@b:~$     while(int(m/=ko))x++
bash: erreur de syntaxe près du symbole inattendu « m/=ko »
a@b:~$     return x
bash: return: x : argument numérique nécessaire
bash: return: « return » n'est possible que depuis une fonction ou depuis un script exécuté par « source »
a@b:~$ }
bash: erreur de syntaxe près du symbole inattendu « } »
a@b:~$ BEGIN{
BEGIN{ : commande introuvable
a@b:~$     ko=1000
a@b:~$     unit2exp["kB"]=ko**1; unit2exp["mB"]=ko**2; unit2exp["gB"]=ko**3
a@b:~$     exp2unit[1]="ko";     exp2unit[2]="Mo";     exp2unit[3]="Go"
a@b:~$ }
bash: erreur de syntaxe près du symbole inattendu « } »
a@b:~$ END{
END{ : commande introuvable
a@b:~$     PROCINFO["sorted_in"]="@val_num_desc";
a@b:~$     printf("%-18s %5s %11s\n\n", "NOM", "PID", "TAILLE")
bash: erreur de syntaxe près du symbole inattendu « "%-18s %5s %11s\n\n", »
a@b:~$     for(pid in procSwap){
bash: erreur de syntaxe près du symbole inattendu « ( »
a@b:~$         sizeSwap=procSwap[pid]
a@b:~$         xp=b2h(sizeSwap)
bash: erreur de syntaxe près du symbole inattendu « ( »
a@b:~$         if(xp==1){
bash: erreur de syntaxe près du symbole inattendu « { »
a@b:~$            printf("%-18s %5d %8d %s\n", procName[pid], pid, sizeSwap/ko^xp, exp2unit[xp])
bash: erreur de syntaxe près du symbole inattendu « "%-18s %5d %8d %s\n", »
a@b:~$         }
bash: erreur de syntaxe près du symbole inattendu « } »
a@b:~$         else{
else{ : commande introuvable
a@b:~$             printf("%-18s %5d %8.1f %s\n", procName[pid], pid, sizeSwap/ko^xp, exp2unit[xp])
bash: erreur de syntaxe près du symbole inattendu « "%-18s %5d %8.1f %s\n", »
a@b:~$         }
bash: erreur de syntaxe près du symbole inattendu « } »
a@b:~$     }
bash: erreur de syntaxe près du symbole inattendu « } »
a@b:~$     xp=b2h(totSwap)
bash: erreur de syntaxe près du symbole inattendu « ( »
a@b:~$     if(xp==1){
bash: erreur de syntaxe près du symbole inattendu « { »
a@b:~$         printf("\nVolume occupé en Swap : %d %s\n\n",totSwap/ko^xp, exp2unit[xp])
bash: erreur de syntaxe près du symbole inattendu « "\nVolume occupé en Swap : %d %s\n\n",totSwap/ko^xp, »
a@b:~$     }
bash: erreur de syntaxe près du symbole inattendu « } »
a@b:~$     else{
else{ : commande introuvable
a@b:~$         printf("\nVolume occupé en Swap : %.1f %s\n\n",totSwap/ko^xp, exp2unit[xp])
bash: erreur de syntaxe près du symbole inattendu « "\nVolume occupé en Swap : %.1f %s\n\n",totSwap/ko^xp, »
a@b:~$     }
bash: erreur de syntaxe près du symbole inattendu « } »
a@b:~$ }
bash: erreur de syntaxe près du symbole inattendu « } »
a@b:~$ /^Name:/{
bash: /^Name:/{: Aucun fichier ou dossier de ce type
a@b:~$     name=$2
a@b:~$ }
bash: erreur de syntaxe près du symbole inattendu « } »
a@b:~$ /^Tgid:/{
bash: /^Tgid:/{: Aucun fichier ou dossier de ce type
a@b:~$     tgid=$2
a@b:~$ }
bash: erreur de syntaxe près du symbole inattendu « } »
a@b:~$ /^VmSwap:/ && $2>0 {
bash: /^VmSwap:/: Aucun fichier ou dossier de ce type
a@b:~$     byteSize=$2*unit2exp[$3]; procName[tgid]=name; procSwap[tgid]=byteSize; totSwap+=byteSize
a@b:~$ }

Dernière modification par geole (Le 21/04/2021, à 18:58)

Hors ligne

#18 Le 21/04/2021, à 18:07

Tawal

Re : Processus Swapés - script

Non geole !
Il ne faut pas copier/coller un script dans un terminal !

Copie le script dans un fichier texte (que tu nommes comme tu veux).
Donne les droits d'exécution à ce fichier. (chmod +x nom_du_fichier)
Et lance-le par cette commande dans un terminal :

awk -f nom_du_fichier /proc/[0-9]*/status 2>/dev/null

Sinon, tu peux aussi en faire un alias.


Le savoir n'a d’intérêt que si on le transmet.
Ubuntu-Mate 20.04.2 LTS Virtualisée
Useless Use of Cat Award

Hors ligne

#19 Le 21/04/2021, à 18:55

geole

Re : Processus Swapés - script

Merci de ces précisions.
Mais je continue de ne pas savoir si cela représente 60% de la partition swap ou 6%!!

Il serait  certainement possible d'ajouter le nombre de process
Voici le retour

NOM                  PID      TAILLE

gnome-shell         1488     19.3 Mo
Xorg                1209      8.7 Mo
rpc.mountd           701      7.8 Mo
ibus-extension-     1532      7.5 Mo
tracker-miner-f     1190      6.5 Mo
goa-daemon          1353      5.5 Mo
evolution-sourc     1563      3.4 Mo
snapd                552      3.0 Mo
networkd-dispat      539      2.4 Mo
unattended-upgr      697      2.3 Mo
pulseaudio          1188      2.0 Mo
ibus-x11            1536      1.7 Mo
gnome-session-b     1280      1.7 Mo
freshclam           6373      1.6 Mo
gnome-shell-cal     1557      1.4 Mo
gnome-session-b     1468      1.3 Mo
gvfs-udisks2-vo     1243      1.2 Mo
colord              1747      1.1 Mo
systemd-udevd        348      1.1 Mo
systemd-resolve      396      1.0 Mo
gdm3                1170      880 ko
systemd             1182      804 ko
goa-identity-se     1384      796 ko
udisksd              566      684 ko
gvfs-afc-volume     1395      680 ko
NetworkManager       483      640 ko
(sd-pam)            1183      608 ko
gvfsd-fuse          1241      596 ko
gnome-keyring-d     1202      568 ko
gvfs-gphoto2-vo     1412      548 ko
ibus-daemon         1527      528 ko
gvfsd               1220      484 ko
at-spi-bus-laun     1408      472 ko
gdm-x-session       1207      468 ko
gnome-session-c     1461      468 ko
at-spi2-registr     1548      468 ko
ibus-memconf        1531      432 ko
ssh-agent           1361      424 ko
ibus-portal         1539      400 ko
gvfs-goa-volume     1345      368 ko
polkitd              542      360 ko
accounts-daemon      455      352 ko
ModemManager         681      352 ko
gvfs-mtp-volume     1403      344 ko
cups-browsed         692      316 ko
smartd               551      304 ko
xdg-permission-     1552      292 ko
gvfsd-metadata      1521      268 ko
upowerd             1420      240 ko
rsyslogd             547      228 ko
cupsd                618      228 ko
dbus-daemon          480      220 ko
dbus-daemon         1414      216 ko
dbus-daemon         1193      200 ko
kerneloops           770       92 ko
systemd-timesyn      399       88 ko
systemd-logind       560       68 ko
switcheroo-cont      556       60 ko
wpa_supplicant       572       52 ko
mount.ntfs          1200       52 ko
avahi-daemon         590       40 ko
mount.ntfs          1109       24 ko
gdm-session-wor     1176       24 ko
mount.ntfs          1129       20 ko
mount.ntfs          1162       20 ko
mount.ntfs          1212       20 ko
rpcbind              393       16 ko
mount.ntfs           956       16 ko
mount.ntfs          1128       16 ko
mount.ntfs          1131       16 ko
mount.ntfs          1147       16 ko
systemd                1       12 ko
avahi-daemon         473        8 ko
cron                 477        4 ko
irqbalance           531        4 ko

Volume occupé en Swap : 96.4 Mo

Voici ce que tu pourrais proposer en copier/coller

touch test.sh
chmod +x test.sh
cat > test.sh<<"EXECUTE"
#!/usr/bin/awk -f

function b2h(mem,    x){
    m=mem
    while(int(m/=ko))x++
    return x
}
BEGIN{
    ko=1000
    unit2exp["kB"]=ko**1; unit2exp["mB"]=ko**2; unit2exp["gB"]=ko**3
    exp2unit[1]="ko";     exp2unit[2]="Mo";     exp2unit[3]="Go"
}
END{
    PROCINFO["sorted_in"]="@val_num_desc";
    printf("%-18s %5s %11s\n\n", "NOM", "PID", "TAILLE")
    for(pid in procSwap){
        sizeSwap=procSwap[pid]
        xp=b2h(sizeSwap)
        if(xp==1){
           printf("%-18s %5d %8d %s\n", procName[pid], pid, sizeSwap/ko^xp, exp2unit[xp])
        }
        else{
            printf("%-18s %5d %8.1f %s\n", procName[pid], pid, sizeSwap/ko^xp, exp2unit[xp])
        }
    }
    xp=b2h(totSwap)
    if(xp==1){
        printf("\nVolume occupé en Swap : %d %s\n\n",totSwap/ko^xp, exp2unit[xp])
    }
    else{
        printf("\nVolume occupé en Swap : %.1f %s\n\n",totSwap/ko^xp, exp2unit[xp])
    }
}
/^Name:/{
    name=$2
}
/^Tgid:/{
    tgid=$2
}
/^VmSwap:/ && $2>0 {
    byteSize=$2*unit2exp[$3]; procName[tgid]=name; procSwap[tgid]=byteSize; totSwap+=byteSize
}
EXECUTE
awk -f test.sh /proc/[0-9]*/status 2>/dev/null
rm test.sh

Ceux qui sont experts sauront intégrer ce qui convient dans une application.

Dernière modification par geole (Le 21/04/2021, à 19:01)

Hors ligne

#20 Le 21/04/2021, à 19:18

Tawal

Re : Processus Swapés - script

En effet geole, ce que tu proposes pourrait se coller dans un terminal.
Mais quel intérêt ?

L'intérêt d'un script est d'être contenu dans un fichier afin de pouvoir l'exécuter à tout moment.


Le savoir n'a d’intérêt que si on le transmet.
Ubuntu-Mate 20.04.2 LTS Virtualisée
Useless Use of Cat Award

Hors ligne

#21 Le 21/04/2021, à 19:32

geole

Re : Processus Swapés - script

Pour une recherche  ponctuelle ou pour curiosité  couplé avec une demande free -h

Si tu le mets dans un fichier, on a le même problème.
soit il tourne en tache de fond et c'est préparé longtemps à l'avance
Soit il faut le lancer ponctuellement

Hors ligne

#22 Le 21/04/2021, à 19:46

Tawal

Re : Processus Swapés - script

Pour faire au plus simple :

Copie/Colle le script du #1 (je l'ai mis à jour) dans un fichier que tu sauvegardes sous un nom de ton choix.
Donne les droits d'exécution à ce fichier.
Place ce fichier dans un dossier du PATH (/usr/local/bin par exemple)

Maintenant, tu disposes d'une nouvelle commande portant le nom du fichier créé précédemment.
Il te suffit de taper le nom de cette commande dans un terminal pour avoir le retour.
Ça, c'est une recherche ponctuelle.

Pour un mode "tâche de fond", il faut inclure le script (ou la commande mais ...) dans un autre qui lui tournera en fond.


Le savoir n'a d’intérêt que si on le transmet.
Ubuntu-Mate 20.04.2 LTS Virtualisée
Useless Use of Cat Award

Hors ligne