Introduzione
Linux è piuttosto popolare per le sue utilità da riga di comando, che non solo semplificano qualsiasi attività ma fanno anche risparmiare molto tempo, che altrimenti viene sprecato in utilità basate sull'interfaccia utente grafica.
Questo è uno dei motivi per cui Linux è un sistema operativo preferito per server e macchine amministrative. Combina la conoscenza dei comandi Linux e degli script di shell e hai a disposizione un kit di strumenti adeguato per l'amministrazione del sistema.
Potresti aver notato che a volte il tuo sistema consuma troppa memoria, il che rende la tua applicazione lenta o non risponde.
Quale pensi sarebbe l'approccio migliore per identificare i processi che consumano più memoria in una macchina Linux?
Quindi questo può_essere facilmente identificato usando il comando in alto e il comando ps e spiegheremo come utilizzare questi due comandi per identificare quali processi stanno consumando tutte le risorse del tuo sistema.
Oggi vedremo come vedere i principali processi che consumano più risorse di memoria e CPU in Linux.
Elenca tutti i processi in esecuzione in Linux
Spiegheremo tre metodi per raggiungere questo obiettivo
1-Elenca i principali processi Linux in base all'utilizzo di memoria e CPU usando "ps"
Quindi il comando ps ha molte opzioni e argomenti disponibili per visualizzare l'output in diversi formati. Tuttavia, può essere eseguito semplicemente con l'argomento 'aux' per avere una panoramica generale dei processi in esecuzione.
# ps aux
Useremo l'argomento '–sort' per ordinare l'output in base alla memoria e all'utilizzo della CPU.
La sintassi per utilizzare l'argomento di ordinamento è:
# ps aux --sort <column_name>
Allo stesso modo, per invertire l'ordinamento dell'output, è possibile utilizzare quanto segue:
# ps aux --sort -<column_name>
Dal momento che vogliamo i processi principali in base all'utilizzo della memoria e della CPU, ordineremo l'output in ordine inverso e inseriremo queste colonne come argomento del nome della colonna.
Trova i principali processi in esecuzione in base all'utilizzo della memoria
$ ps aux --sort -%mem
Trova i principali processi in esecuzione in base all'utilizzo della CPU
$ ps aux --sort -%cpu
Infine, per limitare il numero di processi mostrati a 10, convogliamo l'output al comando head .
Per %mem
[root@unixcop ~]# ps aux --sort -%mem | head -10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 935 0.0 2.2 305600 42468 ? Ssl 08:40 0:01 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid
root 936 0.0 2.1 229132 40776 ? S 08:40 0:00 /usr/libexec/sssd/sssd_nss --uid 0 --gid 0 --logger=files
root 964 0.0 1.5 416596 28384 ? Ssl 08:40 0:00 /usr/libexec/platform-python -Es /usr/sbin/tuned -l -P
apache 1056 0.0 1.4 1959764 27272 ? Sl 08:40 0:00 /usr/sbin/httpd -DFOREGROUND
polkitd 867 0.0 1.3 1631160 25108 ? Ssl 08:40 0:00 /usr/lib/polkit-1/polkitd --no-debug
postgres 985 0.0 1.3 287128 24564 ? Ss 08:40 0:00 /usr/pgsql-13/bin/postmaster -D /var/lib/pgsql/13/data/
apache 1055 0.0 1.2 1828628 23344 ? Sl 08:40 0:00 /usr/sbin/httpd -DFOREGROUND
apache 1054 0.0 1.2 1828628 23152 ? Sl 08:40 0:00 /usr/sbin/httpd -DFOREGROUND
root 949 0.0 1.0 391680 19140 ? Ssl 08:40 0:00 /usr/sbin/NetworkManager --no-daemon
[root@unixcop ~]#
Per %cpu
[root@unixcop ~]# ps aux --sort -%cpu | head -10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.7 186172 14128 ? Ss 08:39 0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
root 1839 0.1 0.0 0 0 ? I 08:53 0:02 [kworker/1:1-events]
root 2 0.0 0.0 0 0 ? S 08:39 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 08:39 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 08:39 0:00 [rcu_par_gp]
root 6 0.0 0.0 0 0 ? I< 08:39 0:00 [kworker/0:0H-events_highpri]
root 9 0.0 0.0 0 0 ? I< 08:39 0:00 [mm_percpu_wq]
root 10 0.0 0.0 0 0 ? S 08:39 0:00 [ksoftirqd/0]
root 11 0.0 0.0 0 0 ? I 08:39 0:01 [rcu_sched]
[root@unixcop ~]#
Anche
Utilizza il formato di comando "ps" di seguito per includere informazioni specifiche su tali processi nell'output:
[qadry@rhel-pc ~]$ ps -eo pid,ppid,%mem,%cpu,cmd --sort=-%mem | head
PID PPID %MEM %CPU CMD
4187 1 15.0 7.1 /usr/lib/vmware/bin/vmware-vmx -s vmx.stdio.keep=TRUE -# product=1;name=VMware Workstation;version=16.1.2;buildnumber=17966106;licensename=VMware Workstation;licenseversion=16.0; -@ duplex=3;msgs=ui /run/media/qadry/New Volume/VMs/CentOS 8 64-bit/CentOS 8 64-bit.vmx
3128 2307 7.2 9.0 /usr/lib64/firefox/firefox
3200 3128 7.0 8.0 /usr/lib64/firefox/firefox -contentproc -childID 1 -isForBrowser -prefsLen 1 -prefMapSize 220513 -parentBuildID 20210716063838 -appdir /usr/lib64/firefox/browser 3128 tab
1927 1 5.3 0.9 /usr/libexec/packagekitd
5814 3128 4.4 3.3 /usr/lib64/firefox/firefox -contentproc -childID 23 -isForBrowser -prefsLen 10019 -prefMapSize 220513 -parentBuildID 20210716063838 -appdir /usr/lib64/firefox/browser 3128 tab
5438 3128 3.7 1.3 /usr/lib64/firefox/firefox -contentproc -childID 21 -isForBrowser -prefsLen 10019 -prefMapSize 220513 -parentBuildID 20210716063838 -appdir /usr/lib64/firefox/browser 3128 tab
2794 2191 3.2 0.4 /usr/bin/gnome-software --gapplication-service
5047 3128 3.2 1.3 /usr/lib64/firefox/firefox -contentproc -childID 16 -isForBrowser -prefsLen 10019 -prefMapSize 220513 -parentBuildID 20210716063838 -appdir /usr/lib64/firefox/browser 3128 tab
2307 2191 2.7 3.0 /usr/bin/gnome-shell
[qadry@rhel-pc ~]$
Se vuoi vedere solo il nome del comando invece del percorso assoluto del comando, usa il seguente formato di comando "ps":
[qadry@rhel-pc ~]$ ps -eo pid,ppid,%mem,%cpu,comm --sort=-%mem | head
PID PPID %MEM %CPU COMMAND
4187 1 15.0 7.1 vmware-vmx
3128 2307 7.1 9.0 firefox
3200 3128 6.9 7.9 file:// Content
1927 1 5.3 0.9 packagekitd
5814 3128 4.4 3.3 Web Content
5438 3128 3.7 1.3 Web Content
2794 2191 3.2 0.4 gnome-software
5047 3128 3.2 1.3 Web Content
2307 2191 2.7 3.0 gnome-shell
[qadry@rhel-pc ~]$
Per me ti ho consigliato di utilizzare questo comando per ottenere il massimo del processo.
[qadry@rhel-pc ~]$ ps -eo pid,ppid,cmd,comm,%mem,%cpu --sort=-%mem | head
PID PPID CMD COMMAND %MEM %CPU
4187 1 /usr/lib/vmware/bin/vmware- vmware-vmx 15.0 7.9
3128 2307 /usr/lib64/firefox/firefox firefox 7.1 9.3
3200 3128 /usr/lib64/firefox/firefox file:// Content 6.3 6.4
1927 1 /usr/libexec/packagekitd packagekitd 5.3 1.0
5814 3128 /usr/lib64/firefox/firefox Web Content 4.1 2.8
5438 3128 /usr/lib64/firefox/firefox Web Content 3.7 1.5
2794 2191 /usr/bin/gnome-software --g gnome-software 3.2 0.4
5047 3128 /usr/lib64/firefox/firefox Web Content 3.2 1.5
4515 2307 /snap/spotify/46/usr/share/ spotify 2.6 3.2
[qadry@rhel-pc ~]$
2-Elenca i principali processi Linux in base all'utilizzo di memoria e CPU utilizzando "top"
Il comando Linux "top" è il comando migliore e ampiamente utilizzato che tutti usano per monitorare le prestazioni del sistema Linux.
Visualizza una vista in tempo reale dei processi di sistema in esecuzione sull'interfaccia interattiva.
Dovresti eseguire il comando superiore in modalità batch per identificare i processi che consumano molta memoria in Linux.
[root@unixcop ~]# top -c -b -o +%MEM | head -n 20 | tail -15
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
935 root 20 0 305600 42468 18448 S 0.0 2.3 0:01.00 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid
936 root 20 0 229132 40776 39104 S 0.0 2.2 0:00.28 /usr/libexec/sssd/sssd_nss --uid 0 --gid 0 --logger=files
964 root 20 0 416596 28384 15104 S 0.0 1.5 0:00.66 /usr/libexec/platform-python -Es /usr/sbin/tuned -l -P
1056 apache 20 0 1959764 27272 9976 S 0.0 1.5 0:00.99 /usr/sbin/httpd -DFOREGROUND
867 polkitd 20 0 1631160 25108 17636 S 0.0 1.3 0:00.23 /usr/lib/polkit-1/polkitd --no-debug
985 postgres 20 0 287128 24564 23188 S 0.0 1.3 0:00.14 /usr/pgsql-13/bin/postmaster -D /var/lib/pgsql/13/data/
1055 apache 20 0 1828628 23344 10124 S 0.0 1.2 0:01.04 /usr/sbin/httpd -DFOREGROUND
1054 apache 20 0 1828628 23152 9932 S 0.0 1.2 0:01.04 /usr/sbin/httpd -DFOREGROUND
949 root 20 0 391680 19140 16660 S 0.0 1.0 0:00.20 /usr/sbin/NetworkManager --no-daemon
1053 apache 20 0 664748 17780 9564 S 0.0 1.0 0:00.19 /usr/sbin/httpd -DFOREGROUND
933 root 20 0 227456 15172 12668 S 0.0 0.8 0:00.14 /usr/libexec/sssd/sssd_be --domain implicit_files --uid 0 --gid 0 --logger=fi+
745 root 20 0 128836 14676 9132 S 0.0 0.8 0:00.73 /usr/lib/systemd/systemd-udevd
871 root 20 0 218964 14416 12368 S 0.0 0.8 0:00.08 /usr/sbin/sssd -i --logger=files
[root@unixcop ~]#
Se vuoi vedere solo il nome del comando invece del percorso assoluto del comando, usa il formato del comando in alto di seguito:
[root@unixcop ~]# top -b -o +%MEM | head -n 20 | tail -15
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
935 root 20 0 305600 42468 18448 S 0.0 2.3 0:01.00 firewalld
936 root 20 0 229132 40776 39104 S 0.0 2.2 0:00.28 sssd_nss
964 root 20 0 416596 28384 15104 S 0.0 1.5 0:00.66 tuned
1056 apache 20 0 1959764 27272 9976 S 6.7 1.5 0:01.01 httpd
867 polkitd 20 0 1631160 25108 17636 S 0.0 1.3 0:00.23 polkitd
985 postgres 20 0 287128 24564 23188 S 0.0 1.3 0:00.14 postmaster
1055 apache 20 0 1828628 23344 10124 S 0.0 1.2 0:01.06 httpd
1054 apache 20 0 1828628 23152 9932 S 0.0 1.2 0:01.06 httpd
949 root 20 0 391680 19140 16660 S 0.0 1.0 0:00.20 NetworkManager
1053 apache 20 0 664748 17780 9564 S 0.0 1.0 0:00.19 httpd
933 root 20 0 227456 15172 12668 S 0.0 0.8 0:00.14 sssd_be
745 root 20 0 128836 14676 9132 S 0.0 0.8 0:00.73 systemd-udevd
871 root 20 0 218964 14416 12368 S 0.0 0.8 0:00.08 sssd
[root@unixcop ~]#
3-Controllo dei processi che consumano molta memoria in Linux utilizzando il comando 'ps_mem'
L'utilità ps_mem viene utilizzato per visualizzare la memoria principale utilizzata per programma (non per processo).
Questa utilità ti consente di controllare quanta memoria viene utilizzata per programma.
Calcola la quantità di memoria privata e condivisa rispetto a un programma e restituisce la memoria totale utilizzata nel modo più appropriato.
Utilizza la seguente logica per calcolare l'utilizzo della RAM. RAM totale =sum (RAM privata per processi di programma) + sum (RAM condivisa per processi di programma)
[root@unixcop ~]# ps_mem
Private + Shared = RAM used Program
912.0 KiB + 122.0 KiB = 1.0 MiB auditd
696.0 KiB + 340.5 KiB = 1.0 MiB chronyd
952.0 KiB + 157.0 KiB = 1.1 MiB crond
844.0 KiB + 425.0 KiB = 1.2 MiB irqbalance
1.3 MiB + 478.5 KiB = 1.7 MiB dbus-daemon
1.0 MiB + 874.5 KiB = 1.9 MiB login
1.2 MiB + 1.3 MiB = 2.5 MiB bash (2)
1.8 MiB + 1.2 MiB = 3.1 MiB systemd-journald
2.4 MiB + 1.1 MiB = 3.4 MiB systemd-logind
1.8 MiB + 1.7 MiB = 3.5 MiB (sd-pam)
2.8 MiB + 853.0 KiB = 3.7 MiB vmtoolsd
2.2 MiB + 1.8 MiB = 4.0 MiB sssd
3.6 MiB + 839.5 KiB = 4.4 MiB VGAuthService
3.1 MiB + 1.8 MiB = 4.9 MiB sssd_be
1.7 MiB + 3.9 MiB = 5.6 MiB sshd (3)
5.6 MiB + 935.0 KiB = 6.5 MiB rsyslogd
6.5 MiB + 1.1 MiB = 7.6 MiB systemd-udevd
3.5 MiB + 4.6 MiB = 8.1 MiB systemd (2)
6.6 MiB + 1.8 MiB = 8.4 MiB NetworkManager
13.3 MiB + 2.6 MiB = 15.9 MiB tuned
14.9 MiB + 1.6 MiB = 16.5 MiB polkitd
8.9 MiB + 12.8 MiB = 21.7 MiB postmaster (8)
25.6 MiB + 2.9 MiB = 28.5 MiB firewalld
27.6 MiB + 2.0 MiB = 29.6 MiB sssd_nss
44.1 MiB + 9.5 MiB = 53.7 MiB httpd (6)
---------------------------------
239.4 MiB
=================================
[root@unixcop ~]#
Conclusione
In questo articolo, abbiamo esaminato il modo in cui elenchi i processi sul tuo sistema e li ordini in base all'utilizzo di RAM e CPU in forma discendente utilizzando le utility ps, top e ps_mem.
Abbiamo visto come usare il comando ps per vedere i principali processi che consumano risorse in Linux. Il comando ps è un comando complesso e la sua padronanza fa molto per amministrare correttamente il sistema e persino per utilizzare l'output in uno script di automazione.
Inoltre mostriamo come utilizzare top comando utilizzato per monitorare le prestazioni del sistema Linux. e l'abbiamo eseguito in modalità batch per identificare i principali processi che consumano memoria in Linux.
Inoltre abbiamo usato ps_mem utilità viene utilizzato per visualizzare la memoria principale utilizzata per programma.