Analisi del carico del server

Come monitorare l'utilizzo di CPU, memoria, disco e rete su un server Linux.

Il carico del server indica la percentuale di utilizzo delle risorse chiave — CPU, RAM e spazio su disco. Monitorare queste metriche consente di identificare rapidamente la causa dei problemi di performance.

L'hardware di un server si divide in quattro componenti principali: CPU, memoria, disco e interfaccia di rete. L'analisi del carico consiste nel raccogliere e interpretare le statistiche di ciascuno.

CPU

L'utility top offre una panoramica di base in tempo reale dell'utilizzo della CPU:

top

Esempio di output:

top - 13:29:39 up 7 days,  1:10,  1 user,  load average: 0.03, 0.03, 0.00
Tasks: 104 total,   2 running, 102 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  1.0 sy,  0.0 ni, 97.0 id,  0.0 wa,  0.0 hi,  1.3 si,  0.3 st
MiB Mem :    969.5 total,     68.8 free,    635.9 used,    264.8 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.    106.7 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    823 mysql     20   0 1852008 401812      0 S   1.0  40.5  81:24.20 mysqld
     13 root      20   0       0      0      0 R   0.3   0.0  26:11.00 rcu_sched
    695 redis     20   0   66776   4216   2100 S   0.3   0.4  19:55.21 redis-server

Metriche principali da monitorare:

  • us — tempo CPU impiegato dai processi utente. Un valore elevato indica che l'applicazione sta mettendo sotto pressione la CPU.
  • id — tempo di inattività della CPU. In condizioni normali dovrebbe mantenersi tra l'80 e il 100%.
  • wa — tempo di attesa per operazioni di I/O. Un valore elevato segnala un sovraccarico del sottosistema disco.

Se us supera stabilmente il 20%, valuta di ottimizzare l'applicazione o di scalare le risorse.

Per le statistiche per singolo core, installa mpstat dal pacchetto sysstat:

apt-get install sysstat
mpstat -P ALL

Esempio di output:

Linux 5.15.0-46-generic (dsde1139-22869.fornex.org)    09/06/2022  _x86_64_   (1 CPU)

02:37:21 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
02:37:21 PM  all    0.90    0.00    0.74    0.13    0.00    0.96    0.32    0.00    0.00   96.95
02:37:21 PM    0    0.90    0.00    0.74    0.13    0.00    0.96    0.32    0.00    0.00   96.95

Per una panoramica più visiva, htop mostra il carico della CPU in un formato di facile lettura:

apt-get install htop
htop

htop Monitoraggio della CPU in htop

Memoria

Usa il comando free per verificare l'utilizzo della RAM:

free

Esempio di output:

               total        used        free      shared  buff/cache   available
Mem:          992724      655200       73968       86748      263556      104972
Swap:              0           0           0

Presta particolare attenzione a Swap — indica quanto spazio su disco viene utilizzato come memoria di overflow quando la RAM si esaurisce. Un basso livello di RAM libera da solo non è critico, ma una crescita dello Swap richiede un intervento immediato: aggiungi memoria oppure distribuisci il carico su più server.

Per un'analisi dettagliata dell'utilizzo della memoria:

cat /proc/meminfo

Esempio di output:

MemTotal:         992724 kB
MemFree:           73192 kB
MemAvailable:     104864 kB
Buffers:           10856 kB
Cached:           226868 kB
SwapCached:            0 kB
...

Disco

Inizia verificando lo spazio su disco disponibile:

df -h

Esempio di output:

Filesystem      Size  Used Avail Use% Mounted on
tmpfs            97M  732K   97M   1% /run
/dev/vda1       9.8G  8.5G  846M  92% /
tmpfs           485M     0  485M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            97M     0   97M   0% /run/user/0

La colonna Use% mostra la percentuale di spazio occupato su ciascuna partizione.

Per monitorare l'attività di lettura/scrittura suddivisa per processo, usa iotop:

apt-get install iotop
iotop

Esempio di output:

Total DISK READ:         0.00 B/s | Total DISK WRITE:         0.00 B/s
Current DISK READ:       0.00 B/s | Current DISK WRITE:       0.00 B/s
    TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
      1 be/4 root        0.00 B/s    0.00 B/s  ?unavailable?  init
      2 be/4 root        0.00 B/s    0.00 B/s  ?unavailable?  [kthreadd]
    ...

Metriche principali:

  • Actual DISK READ — dati effettivamente letti dal disco (tenendo conto della cache).
  • Actual DISK WRITE — dati effettivamente scritti sul disco.

Raccomandazioni in caso di carico disco elevato:

  • Elevata attività di lettura dall'applicazione — abilita il caching APC.
  • Elevata attività di lettura dal database — rivedi la configurazione del database.
  • Elevata attività di lettura dal server web — valuta l'adozione di un cache HTTP.
  • Elevata attività di scrittura — assicurati che i log di accesso e di debug siano disabilitati; le cause più probabili sono il database o i file caricati dagli utenti.

Rete

L'utility cbm mostra il traffico di rete in tempo reale per interfaccia:

apt-get install cbm
cbm

Esempio di output:

Interface      Receive          Transmit         Total
lo             0.00 B/s         0.00 B/s         0.00 B/s
eth0           35.90 kB/s       758.75 B/s       36.65 kB/s

Un traffico di rete elevato non è di per sé un problema, ma valori sostenuti vicini al picco sono un segnale per iniziare a pianificare la scalabilità.

Statistiche combinate

L'utility dstat mostra un riepilogo in tempo reale di tutti i sottosistemi, aggiornato ogni secondo:

apt-get install dstat
dstat

Esempio di output:

--total-cpu-usage-- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read  writ| recv  send|  in   out | int   csw
  2   1  97   0   0|  35k   29k|   0     0 |   0     0 | 683   702
  1   0  99   0   0| 124k    0 |  39k 1162B|   0     0 |1003   822
  3   4  86   6   1|3580k 8776k|  37k  522B|   0     0 |1161  1018

Colonne principali:

  • total-cpu-usage — carico della CPU.
  • dsk/total — attività disco.
  • net/total — attività di rete.

Aiuto

Hai domande o ti serve una mano? Scrivici tramite il sistema di ticket — siamo sempre qui per aiutarti!

Hai bisogno di aiuto?I nostri ingegneri ti aiuteranno gratuitamente con qualsiasi domanda in pochi minutiContattaci