====== Řešení problémů/paměť ======
{{:hwcard.png}}
Zde najdete **obecné** rady pro případ, že řešíte problémy s pamětí.
====== Diagnostika ======
===== Kolik mám volné paměti? =====
Spusťte [[:Sledování systému]] a záložku //Zdroje//.
{{ .:zdroje.png }}
Nebo použijte v [[:Terminál]]u 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|
|Celkem|2509 MB|1051 MB|
|Obsazeno|247 MB|0 MB|
|Volno|2262 MB|1051 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.
===== Který proces mi zabírá nejvíc paměti? =====
Spusťte [[:Sledování systému]], záložku //Procesy//, a klikněte na sloupec **Paměť**.
{{ .:procesy.png }}
Nebo použijte v [[Terminál]]u příkaz **top**; pak zmáčkněte S-m, aby se procesy seřadily podle toho, kolik paměti (RSS/RES, viz níže) zabírají.
{{ .:top.png }}
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í ======
===== Linux mi žere strašně moc RAM! =====
* Zkontrolujte výstup z ''free -m'' nebo //Sledování systému//. Pokud používáte minimum //swap//u 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.
===== Zeptejte se na fóru Ubuntu =====
{{:ubuntu-logo.png}}
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 [[http://paste.ubuntu.com/|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 ======
===== Kolik RAM mám skutečně k dispozici? =====
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.
===== Co znamená VIRT, RSS/RES, SHR? =====
**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 //swap//u, 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.
===== Jak zjistím údaje k RAM? =====
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