Windows 10 používá 99% paměti (vyřešeno, žádám jen o vysvětlení..)
Zdravím, o víkendu sem zjistil, že můj (pár měsíců nový) Windows 10 z nějakého důvodu najednou používá 99% paměti i když nic nejede a ve správci úloh sem nenašel nic podezřelého. (PC je skoro čistý, žádné viry/malware..)
Po nějaké době restartování PC a pátrání po internetu sem našel tento příkaz a v příkazovém řádku sem ho jako administrátor zadal:
wmic recoveros get autoreboot
wmic recoveros set autoreboot = false
wmic recoveros get autoreboot
wmic recoveros get DebugInfoType
wmic recoveros set DebugInfoType = 7
wmic recoveros get DebugInfoType
wmic pagefile list /format:list
wmic Computersystem where name="%computername%" get AutomaticManagedPagefile
wmic Computersystem where name="%computername%" set AutomaticManagedPagefile=True
wmic Computersystem where name="%computername%" get AutomaticManagedPagefile
bcdedit /enum {badmemory}
Po restartu (zatím) vše šlape jak má a problém je snad vyřešen...
Pořád ale nevím, co se vlastně stalo,co ten příkaz přesně znamená a jak to opravil?
Prosím tedy někoho zkušeného o vysvětlení abych měl klid na duši, díky.
Zajimaji te pouze řádky, kde je SET
V podstate se tam nedela nic. Zakaze se automaticky restart po chybe, nastavi se detail informaci pri chybe a nastavi se automaticka velikost strankovaciho souboru (coz je vychozi hodnota), pokud jsi to netunil nejakym supernastrojem.
Tak sem zase zpět, teď sem si všiml, že využitá paměť po zapnutí PC opět pomalu jen tak stoupá...
2 týdny to jelo bez problému, žádná nová aktualizace, nic nebylo stáhnuto...
žádný screen ani při prvním dotazu, ani teď. takže si tipnu: něco se děje.
Ve spravci uloh mas moznost si to seradit dle spotreby paneti a rovnou vidis nejvetsi zrouty.
Ja mam počítač s 32 GB RAM, běží nějakých pouhých 21 dní od restartu, ted zrovna v podstatě nic moc nedělám (až na pár desítek otevřených oken v prohlížeči) a mám volných 6.5GB tedy 80% paměti je nějak zaplněno. Po restartu byla volná prakticky celá paměť (a po dalším bude zas).
Když si vyjedu, co používají programy, tak mi vyjde asi 5GB, tedy pouhých 15.6%. A systém si na začátku taky kousek uloupnul (takže je vidět jen 31GB jako celek).
Mám linux, viry nemám, ani adware ani jiné problémy (leakující programy a tak).
Mám tedy problém, nebo ne?
Samozřejmě že ne. Kdykoli načítám, nebo ukládám nějaký soubor (každé spuštění programu znamená načtení jeho souboru, ať už je to prohlížeč, textový editor, hra, nebo něco, co jsem si sám napsal), tak systém ten soubor podrží v paměti, protože je docela rozumná šance, že se k němu za chvíli vrátím. Stejně tak prohlížeč si pamatuje obrázky (a často i stránky), které stáhnul a nebude mi při každé návštěve nějaké stránky stahovat všechna loga, když se při minulém stahování z jejich hlavičky dočetl, že se nebudou tento měsíc měnit. Nebo když se na ně zeptá a server mu odpoví, že se od minula nezměnily.
A když požaduju stejný soubor znovu (dopsal jsem text, zavřel editor, pak chci psát další, tak otevřu editor ...), tak se nejdřív podívá, jestli ho náhodou nemá v paměti a pokud ano, tak ho použije (disketa je pomala, HDD je rychlejsi, SSD ještě rychlejší, ale proti paměti to jsou loudové všichni).
Takže se paměť pomalu plní soubory, na které jsem sáhnul, až je skoro plná (u mě tam teď leží něco jako 31 - 6.5 - 5 = 19.5GB). A já zase chci nějaký soubor a on není v paměti, co s tím? Počítač se podívá, který soubor v paměti jsem nejdéle nepoužil, ten zahodí a načte ten nový. Pravda je, že někdy to zahození není tak jednoduché, protože jsem v něm dělal nějaké změny a ještě se nestihnul uložit v nové verzi, tak se musí počkat, až se uloží a pak se teprve dá zahodit, ale pořád je to lepší, než kdyby ta paměť ležela ladem a muselo se tahat vždycky všechno. (Když už jsem si tu paměť zaplatil, tak ať je taky k něčemu dobrá, že ...) Když spustíš další program, tak se prostě nějaký neptřebný kus té historie uvolní a vrazí se tam ten nový program a spustí se. A zase je paměť "skoro plná jen tak".
Typicky je to vidět, když kopíruju z rychllého disku na pomalý (z SSD na disketu/flasku) hromadu souborů výrazně větší, než je paměť - prvních pár souborů je hotových ihned (protože se rychle načtou do paměti, označí jako určené k uložení a hned se čtou další, zatímco se předchozí na pozadí pomalu přesouvají na pomalé medium, ale když se paměť zaplní, tak rychlost kopírování rázem spadne, protože už ji neurčuje to, jak rychle dokážeš číst zdrojové soubory, ale jak rychle je dokážeš zapisovat na cíl (s večkerou režií okolo, jakože se použité sektory musí označit jako použité, aby se na ně nepsalo znovu a jméno souboru se musí zapsat do správného adresáře, že už tam teda je a pokud je na cíli žurnál, tak se musí updatovat, že soubor byl FAKT uložený ... zase žurnál dokáže dost pomoct, když třeba spadnou pojistky a je potřeba dát dohromady, co na tom disku je a co není)
Dalším efektem je, že když kopírování skončí, tak nemužeš tu flasku jen tak vyrvat z díry, protože se na ní možná ještě furt píše, zatímco se počítač zabývá tím, jak ti nahrát novou hru, nebo prolézt jiné adresáře, nebo co to vlastně děláš. A ani to, že u diskety přestane blikat kontrolka ještě neznamená, že je hotovo, protože počítač zatím jen zvládnul odlít dost souborů na to, aby se mohl věnovat tvým nejnovějším požadavkům a zápis zbytku klidněš ještě může počkat. Občas i řadu minut. Proto je u vyndavacích medií ten příkaz "bezpečně odpojit", nebo jak se to zrovna tvému systému líbí (já třeba používám něco jako "umount /dev/sdc7", nebo "umount /home" a někdo jiný kliká na ikonku vyšoupátka) a ten si ohlídá, že se skutečně na to medium opravdu uloží všechno co tam patří, pak ho odpojí a oznámí ti to, že ho mužeš bezpečně vyndat.
Navíc při táhle akrobacii s pamětí si systém většinou nechává nějaký (malý) kus volný, aby ho měl při ruce, poḱud se tvůj program rozhodne, že ho právě nutně potřebuje (třeba pro vykreslení další jednotky, nebo zapamatování, co zrovna klofeš na klávesnici, nebo pro jiný z bambilionu možných důvodů). (U mě je to zrovna těch 6.5GB volných.)
Pokud to s otvíráním programů a editací souborů přeženeš, tak OS zjistí, že už není v cache nic, co by se dalo uvolnit a tak prostě vezme kus nějakého programu, nebo souboru, co zrovna používáš (zase ideálně ten nejstarší), zapíše ho na disk do swapu (což teda jako trvá dlouho, ale co má chudák dělat, aby ti vyhověl), vyhodí ho z paměti a vrazí tam tentvůj nejnovější požadavek. Když se pak ukáže, že ten odložený kus paměti je potřeba (přepneš třeba na jeho tab a začneš klikat), tak se z toho disku zase nahraje zpátky do paměti (což zase trvá) a tváří se, že tam celou dobu byl. (A pokud jsi mezitím nic nezavřel, tak se pro něj nejdřív musí uvolnit místo, tak se do swapu hodí něco jiného. Přejeme přijemné swapování.)
No a když už není ani cache, ani volná paměť, ani místo ve swapu a ty (nebo tvoje programy) se furt něčeho dožaduješ, tak holt systém řekne "Sorry, co je moc, to je moc, něco musí z kola ven" a nějak se zařídí. Třeba vyhodí chybové okno že není dost paměti na vyhození chybového okna, že není dost paměti, něco někde zahodí a následkem toho něco nějak zbuchne.
---
No, ve skutečnosti je to ještě mnohem složitější, ale pro představu by to mohlo stačit.
A proto, když vidím, že prakticky není volná paměť, ale programů běží málo a všechno je v buffer/cache a swap se nepoužívá, nebo jen trochu, tak jsem naprosto v klidu. (Ono v tom swapu můžpu být nějaká pomocná data něčeho třeba okolo screen saveru, grafiky, knihovny pro zobrazování nějakých obskurních formátů, nebo cokoli jiného, co se používá jen zřídka a před týdnem to tam vytlačil nějaký fakt náročný proces a od té doby to nikdo nechtěl)
Amen!
Mnoho zbytočných slov. Ak by si mal využitých tých 99% Ram, tak "v klidu" nebudeš.
Zrejme by si šiel dokúpiť ďalších 32 GB, nech je tvoj OS spokojný :)
Pokud bude swap v podstate prazdny, tak budu v naprostem klidu :)
Napriklad ted pisu z jineho stroje, 5% pameti volne, 2/4jadro, vytizeni neco prez 100% vsech jader, v poslednich 5 minutach 120% vsech jader, reaguje naprosto pohodove a na pozadi kompiluje vsechny programy pro novou masinu. I na swap si trochu sahnul, ale porad mista dost a reakce na moje akce okamzita :)
A bezi v kuse 4 mesice, zadny problem ... Ty 3 uzivatele, to jsem ja, ja jako root a ja z uplne jineho stroje :) Ale neni problem i vic ruznych lidi, pripadne i kazdy s jinym, nezavislym, grafickym rozhranim
No ty to máš pod kontrolou. A nech je pamäť aj plná, tak pokiaľ to má opodstatnenie tak je to v poriadku. Lenže on to pod kontrolou nemá, a špeciálne pod windows ju tiež nemá, a to nemusí byť v poriadku.
Môže to spôsobiť nenažraný proces, nežiadúci proces, nejaké memory leaky.. typicky windows aktualizácie :) hocičo. A teraz zisťuj kam sa podeli tie gigabajty.. a Správca úloh veľmi nepomôže.
No jo no, windows ...
Predmetné príkazy nič neriešia, nič neopravili, iba okresali pagefile a swap na výrobné nastavenia dané W10 na základe HW.
W10 využíva dostupnú RAM, Prefetch a spol. podľa systémových požiadaviek, ako aj postupné načítanie SW na pozadí po ich otváraní.
Jediný problém by mohol mať pri vysokej RAM:
RuntimeBroker.exe,
SearchApp.exe,
SearchIndexer.exe, ak nebola úplne načítaná Indexácia,
Ntoskrnl.exe + dwm.exe - sofistikovaná škodná.
V opačnom prípade nerieš blbosti, nechaj RAM na správe W10.
(Vyladený OS zbavený bloatware, appx, zbytočností naťahaných na pozadí "autoruns64.exe", si po ustálení, po zatvorení SW, drží vždy cca 25%, tj. "štvrtinu" zaplnenej kapacity z celkovej RAM presne tak, ako po reštarte PC. Je to nastavené výrobcom Windows).
Najviac žerie RAM kadejaké smetie v OS v podobe AV, pitomých hier či neschopný, nevyladený chromajzl_browser, a to aj po ich zatvorení.
Na trhu existuje správca RAM v grafickom zobrazení:
https://download.sysinternals.com/files/RAMMap.zip
ak chceš okresať dodatočne RAM na minimum, v lište RAMMap.exe, rozbaľ Empty - klik na "Empty Working Sets".
Potom sú ešte na nete dávky *bat pre Plánovač úloh k okresaniu RAM (ďalšie hovadiny, zbytočnosti k správe RAM pre Windows).
Kromě toho, co yu bylo řečeno může k nedostatku RAM přispět i její fragmentace.
Program, když potřebuje paměť, tak si o ni požádá. OS mu přidělí nejbližší celý úsek paměti. Po uvolnění je pak úsek paměti opět k dispozici, ale za timto usekem je paměť zabraná dalšími procesy. Systém by si s tím měl poradit, ale ne vždy se to daří. Paměť není disk, takže se data nerozdeli do několika úseků, ale potřebují celý usek. Pokud není úsek v požadované velikosti k dispozici, je problem.
Pokud program paměť nevolní a stále běží, paměť zůstane zabraná (memory leaks) Uvolní se až v okamžiku ukončení programu, k čemuž nedojde u služeb a systémových procesů, které běží po celou dobu chodu OS. Tím se spotřeba paměti procesem zvyšuje a zvyšuje.
K tomuto úkonu má Windows svoj nástroj:
Trebárs je možné vytvoriť zástupcu (odkaz) na ploche pre manuálne spustenie v prípade x64 bit OS W10:
%windir%\SysWOW64\rundll32.exe advapi32.dll,ProcessIdleTasks
všetko ohľadom defragmetnácie RAM, údržby, čistenia fičí na pozadí, príkaz obsahuje viacej úkonov.
pri SSD nevykoná tento príkaz ako bonus defragmentáciu sektorov na rozdiel od ložiskových hdd v prípade, ak je defragmentácia zapnutá.
S memory leaks nepomůže, protože OS neví, že ta paměť je volná.
S tou defragmentaci paměti to taky není nijak slavné - jednak nemůžeš procesům hýbat s pamětí, kterou používají a druhak je tam mechanizmus komprese méně používané paměti, který tomu taky moc nepomáhá