È importante trovare la memoria di monopolizzazione del processo o dell'applicazione del sistema in caso di problemi di prestazioni. Il post elenca alcuni dei comandi di base per calcolare l'utilizzo della memoria su un sistema Linux generale.
1. Calcola l'utilizzo della memoria utilizzando SAR
# sar -r 1 10 Linux 2.6.32-504.el6.x86_64 (geeklab) 03/05/2018 _x86_64_ (16 CPU) 10:17:41 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit 10:17:42 AM 1772488 31104712 94.61 382184 23831756 11675188 11.86 10:17:43 AM 1777348 31099852 94.59 382184 23831756 11675188 11.86 10:17:44 AM 1778412 31098788 94.59 382184 23831756 11675188 11.86 10:17:45 AM 1776720 31100480 94.60 382184 23831756 11675072 11.86 10:17:46 AM 1777932 31099268 94.59 382184 23831760 11675072 11.86 10:17:47 AM 1780848 31096352 94.58 382184 23831760 11675072 11.86 10:17:48 AM 1774460 31102740 94.60 382184 23831760 11675644 11.86 10:17:49 AM 1740080 31137120 94.71 382184 23831760 11717568 11.91 10:17:50 AM 1773608 31103592 94.61 382184 23831708 11675076 11.86 10:17:51 AM 1774752 31102448 94.60 382184 23831796 11675076 11.86 Average: 1772665 31104535 94.61 382184 23831757 11679414 11.87
Per calcolare la memoria libera dal valore medio, utilizzare la formula seguente:
kbmemfree + kbbuffers + kbcached = actual free memory on the system
Utilizzando l'esempio sopra:
1772665 + 382184 + 23831757 = 25986606KB
Sono circa 24,78 GB di memoria libera.
2. Calcola l'utilizzo della memoria usando il comando gratuito
# free -m total used free shared buffers cached Mem: 32106 30382 1723 3031 373 23273 -/+ buffers/cache: 6736 25370 Swap: 63999 2 63997
Dall'esempio sopra, per ottenere memoria libera sul sistema usa:
-/+ buffers/cache ==> free column
La colonna gratuita riporta 25370 MB in modo che corrisponda anche al calcolo dell'output sar (tenendo presente che in SAR è stato utilizzato il valore medio)
Per utilizzare la memoria utilizzata sul sistema:
-/+ buffers/cache ==> used column
Nel nostro caso la memoria utilizzata è 6736 MB.
3. Trova i primi 10 utenti che stanno consumando più memoria sul sistema in percentuale
Si prega di utilizzare una semplice sintassi della shell che utilizza il comando ps:
# ps -eo user,pcpu,pmem | tail -n +2 | awk '{num[$1]++; cpu[$1] += $2; mem[$1] += $3} END{printf("NPROC\tUSER\tCPU\tMEM\n"); for (user in cpu) printf("%d\t%s\t%.2f\t%.2f\n",num[user], user, cpu[user], mem[user]) }' NPROC USER CPU MEM 29 oracle 0.10 4.00 1 ntp 0.00 0.00 1 rpc 0.00 0.00 5 user 0.00 0.00 1 dbus 0.00 0.00 1 mysql 0.00 0.30 12 daemon 0.00 0.60 2 postfix 0.00 0.00 12 apache1 2.40 4.80 1 rpcuser 0.00 0.00 349 root 7.70 3.30
Dall'osservazione dell'esempio sopra, root ha 349 processi che occupano il 3,3% della memoria, l'utente Oracle ha 29 processi che occupano il 4% della memoria, l'utente apache1 ha 12 processi che consumano circa il 4,8% della memoria, che in totale circa il 12%. Il valore di circa il 12% può essere visto anche sulla colonna "commit" di sar.
4. Controlla i 10 principali processi che stanno consumando RSS ( Resident Set Size )
Si prega di utilizzare una semplice sintassi della shell che utilizza il comando ps:
# ps -e -orss,pid=,user=,args=, | sort -b -k1,1n | pr -TW$COLUMNS| tail -10 74336 5509 root /opt/perf/bin/perfalarm 77212 8389 oracle /grid/CRS/bin/ohasd.bin reboot 78216 9731 root /opt/OV/lbin/agtrep/agtrep -start 96768 9808 root /opt/OV/hpcs/hpsensor 108580 12073 root /usr/lib/systemd/systemd-journald 136260 76477 root storapid start -name storapid 178316 5350 root /opt/OV/bin/oacore oacore /var/opt/OV/conf/oa/PipeDefinitions/oacore.xml 186168 10367 oracle /grid/CRS/bin/oraagent.bin 1013484 31562 root vxconfigd -x syslog 1317360 76463 root vxencryptd
La prima colonna è RSS , il secondo è PID , il terzo è UTENTE e il quarto è Comando eseguito .
RSS value è il più importante qui in quanto mostra quanta memoria il processo ha effettivamente allocato in KB , non utilizzare VSZ valore che calcola la memoria "richiesta" per processo, poiché ogni processo sta allocando "overhead" che è presentato dal valore VSZ, dove RSS riporta la vera allocazione della memoria per processo.
Dopo il calcolo dell'output RSS, "utilizzato ' la memoria può essere ottenuta e confrontata con -/+ buffer/cache – colonna utilizzata dall'output di free comando — sia l'RSS che l'output del comando gratuito dovrebbero corrispondere.