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

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

řešení_problémů:paměť [2012/07/28 07:44] – vytvořeno ubuntuřešení_problémů:paměť [2019/02/25 17:21] (aktuální) – upraveno mimo DokuWiki 127.0.0.1
Řádek 1: Řádek 1:
 +====== Ř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).
 +<code>
 +~ $ free -m
 +             total       used       free     shared    buffers     cached
 +Mem:          2509       1404       1105          0        123       1034
 +-/+ buffers/cache:        247       2262
 +Swap:         1051          0       1051
 +</code>
 +|   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 <key>S-m</key>, 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")
 +<code>
 +~ $ 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
 +</code>
 +====== Ř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í:
 +<code>
 +dmesg | grep -iw memory
 +</code>
 +<code>
 +...
 +[    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
 +</code>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'').
 +<code>
 +sudo dmidecode -t memory
 +</code><code>
 +sudo lshw -c memory
 +</code><code>
 +sudo -s
 +apt-get install i2c-tools
 +modprobe eeprom
 +decode-dimms
 +</code>