řešení_problémů:paměť

Řešení problémů/paměť

Zde najdete obecné rady pro případ, že řešíte problémy s pamětí.

Diagnostika

Spusťte Sledování systému a záložku Zdroje.

Nebo použijte v Terminálu příkaz free -m (přepínač -m převede jednotky na MB).

~ $ free -m
             total       used       free     shared    buffers     cached
Mem:          2509       1404       1105          0        123       1034
-/+ buffers/cache:        247       2262
Swap:         1051          0       1051
RAM swap
Celkem2509 MB1051 MB
Obsazeno247 MB0 MB
Volno2262 MB1051 MB

Systém vykazuje pouze 9,9% využití RAM, 1150 MB je využito pro vyrovnávací paměť (cache/buffers), a v případě potřeby bude hned uvolněno. Swap není využit, což ukazuje na dostatečnou kapacitu RAM.

Spusťte Sledování systému, záložku Procesy, a klikněte na sloupec Paměť.

Nebo použijte v Terminálu příkaz top; pak zmáčkněte Shift+M, aby se procesy seřadily podle toho, kolik paměti (RSS/RES, viz níže) zabírají.

Nebo pro jednoduchý výpis bez aktualizace ps -eo rss,args | sort -rn | head (výpis „RAM top ten“)

~ $ ps -eo rss,args | sort -rn | head
168744 /usr/lib/firefox-3.6.24/firefox-bin
30208 /usr/bin/python /usr/share/kupfer/kupfer.py --no-splash
26172 compiz
24340 nautilus
20896 /usr/lib/firefox-3.6.24/plugin-container /usr/lib/flashplugin-installer/libflashplayer.so 1414 plugin true
18936 python /usr/share/stackapplet/stackapplet.py
18128 /usr/bin/X :0 -nr -verbose -auth /var/run/gdm/auth-for-gdm-87yGLs/database -nolisten tcp vt7
16696 gnome-panel
15508 /usr/bin/python /usr/share/system-config-printer/applet.py
13796 /usr/lib/gnome-panel/clock-applet --oaf-activate-iid=OAFIID:GNOME_ClockApplet_Factory --oaf-ior-fd=42

Řešení

  • Zkontrolujte výstup z free -m nebo Sledování systému. Pokud používáte minimum swapu nebo žádný, je vše v pořádku. Kernel se vždy snaží využít maximum RAM pro zrychlení práce.
  • Pokud ve výpise procesů vidíte, že některý neúměrně zabírá RAM (řádově stovky MB), může se jednat o chybu v programu (memory leak). Zkuste jinou verzi programu nebo jiný podobný, případně chybu nahlašte.

Snažte se uvést co nejvíce informací, hlavně

  • podrobný popis problému a přesný přepis chybového hlášení (případně snímek obrazovky, třeba i z foťáku)
  • co jste všechno už zkoušeli při řešení problému
  • informace k systému (hardware, distribuce, vydání)
  • přidejte výstupy z příkazů ps -eo rss,args | sort -rn | head a free -m
  • případně připojte další relevantní logy (pokud jsou dlouhé, tak radši jako přílohu, nebo je nahrajte na Ubuntu pastebin)
  • … a pokud se vám podaří problém nakonec vyřešit, nezapomeňte se pak na fóru pochlubit jak…

Technické detaily

Kapacita RAM modulů nemusí odpovídat údaji o volné paměti ve výstupu free apod. Podívejte se, co k tomu říká kernel při bootování:

dmesg | grep -iw memory
...
[    0.000000] Memory: 2554056k/2612412k available (4940k kernel code, 57908k reserved, 2333k data, 688k init, 1703108k highmem)
...
[    0.746013] Freeing initrd memory: 14896k freed
[    1.316731] Freeing unused kernel memory: 688k freed

K dispozici je celkem 2612412k paměti.

57908k je rezervováno pro kernel a obsluhu paměti, z toho 4940k pro kód, 2333K pro různá data, 14896k bylo po zavedení systému uvolněno. Zbývá tedy 2554056k RAM.

Výpočet může vycházet pro různé systémy různě, ale vždy je třeba počítat se zabranou pamětí pro kernel a režii. Také pokud se velikost modulů RAM blíží 4GB na 32 bitovém systému, je potřeba počítat s ukrojením větší části paměti na mapování grafické paměti, I/O apod.

VIRT (virtual size) - celková velikost namapované paměti - kód, data, sdílené knihovny, paměť vyžádaná programem k použití. Maximální velikost paměti, kterou může momentálně proces použít.

RES (resident size) - paměť skutečně využitá procesem. Pokud si proces vyžádá 100M paměti, ale skutečně použije jen 1M, stoupne RES o 1M. Nezahrnuje ale část paměti ve swapu, a může obsahovat sdílenou paměť.

SHR (shared) - paměť, kterou je možné sdílet.

Nejvíce vypovídající hodnotou je asi RSS/RES, ale i ta je těžko izolovatelná pro konkrétní proces.

Použijte údaje z DMI (dmidecode, případně lshw), nebo SPD informace z EEPROM (decode-dimms).

sudo dmidecode -t memory
sudo lshw -c memory
sudo -s
apt-get install i2c-tools
modprobe eeprom
decode-dimms
  • Poslední úprava: 2019/02/25 18:21
  • (upraveno mimo DokuWiki)