V případě problému s výkonem je důležité najít proces nebo aplikaci, která zatěžuje paměť systému. Příspěvek uvádí několik základních příkazů pro výpočet využití paměti v obecném systému Linux.
1. Vypočítejte využití paměti pomocí 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
Pro výpočet volné paměti z průměrné hodnoty použijte níže uvedený vzorec:
kbmemfree + kbbuffers + kbcached = actual free memory on the system
Použití výše uvedeného příkladu:
1772665 + 382184 + 23831757 = 25986606KB
To je přibližně 24,78 GB volné paměti.
2. Vypočítejte využití paměti pomocí příkazu free
# free -m total used free shared buffers cached Mem: 32106 30382 1723 3031 373 23273 -/+ buffers/cache: 6736 25370 Swap: 63999 2 63997
Z výše uvedeného příkladu pro získání volné paměti v systému použijte:
-/+ buffers/cache ==> free column
Volný sloupec hlásí 25370 MB, takže odpovídá i výpočtu výstupu sar (je třeba mít na paměti, že v poli SAR byla použita průměrná hodnota)
Chcete-li použít použitou paměť na systému:
-/+ buffers/cache ==> used column
V našem případě je použitá paměť 6736 MB.
3. Najít Top 10 uživatelů, kteří spotřebovávají více paměti v systému v procentech
Použijte prosím jednoduchou syntaxi shellu, která využívá příkaz 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
Z pozorování výše uvedeného příkladu má root 349 procesů, které zabírají 3,3 % paměti, uživatel oracle má 29 procesů, které zabírají 4 % paměti, uživatel apache1 má 12 procesů, které spotřebovávají přibližně 4,8 % paměti, což je celkem asi 12 %. Hodnotu kolem 12 % lze také vidět ve sloupci sar ‘commit’.
4. Zaškrtněte 10 hlavních procesů, které spotřebovávají RSS ( velikost rezidentní sady )
Použijte prosím jednoduchou syntaxi shellu, která využívá příkaz 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
První sloupec je RSS , druhý je PID , třetí je USER a čtvrtý je Příkaz proveden .
RSS hodnota je zde nejdůležitější, protože ukazuje, kolik paměti proces skutečně alokoval v KB , nepoužívejte prosím VSZ hodnota, která počítá „požadovanou“ paměť podle procesu, protože každý proces přiděluje „režii“, která je prezentována hodnotou VSZ, kde RSS hlásí skutečnou alokaci paměti podle procesu.
Po výpočtu výstupu RSS bude „použito “ paměť lze získat a porovnat s -/+ buffery/cache – použitý sloupec z výstupu free příkaz — RSS i výstup z příkazu free by se měly shodovat.