NÁVODY

Stránkovací soubor a hry: proč se jeho vypnutí vymstí

Windows může programům slíbit jen tolik paměti, kolik je RAM plus stránkovací soubor. Když stránkovací soubor odstraníš, strop klesne těsně pod velikost RAM a hra, která na něj narazí, může zamrznout nebo spadnout.

Máš 32 GB RAM, takže ti nějaký návod řekl, že stránkovací soubor je pozůstatek z dob menších počítačů a dá se zrušit. Nebo hra spadla s chybou nedostatku paměti, zatímco Správce úloh ukazoval spoustu volné RAM. Nebo uprostřed zápasu Windows napsal „Your computer is low on memory“ a požádal tě, abys zavřel programy.

Všechny tři věci mají stejný mechanismus, a není to ten, se kterým počítá rada „vypni ho“.

K čemu stránkovací soubor je

Windows rozdává paměť ve dvou krocích. Program si paměť nejdřív potvrdí (commit), čímž mu Windows slibuje, že místo existuje, a teprve později do ní zapisuje. Microsoftův úvod ke stránkovacímu souboru definuje strop těchto slibů: limit potvrzení systému (system commit limit) je součet fyzické paměti a všech stránkovacích souborů dohromady.

Součet všech slibů je commit charge a není totéž co používaná RAM. Microsoftův výkonnostní průvodce o potvrzené paměti upozorňuje, že do potvrzené paměti se nemuselo nic zapsat a nikdo se jí nemusel dotknout, takže commit charge může dosáhnout limitu, zatímco fyzické paměti je k dispozici pořád dost. Tak může hře dojít paměť, i když Správce úloh ukazuje volnou RAM.

Stránkovací soubor má i druhý úkol: drží paměť, která se změnila, ale používá se zřídka, takže ji Windows může vyndat z RAM a tu RAM dát něčemu vytíženějšímu. Jeho třetí úkol, výpisy při pádu, má vlastní oddíl níže.

Co se stane bez něj

Bez stránkovacího souboru se podle Microsoftova průvodce velikostí stránkovacího souboru limit potvrzení stane o něco menším než nainstalovaná fyzická paměť. Sliby všech programů se teď musí vejít do RAM, včetně paměti, která byla slíbena a ještě se nepoužila.

Když commit charge dosáhne limitu, úvod uvádí, že systém a procesy nemusí dostat potvrzenou paměť, což může způsobit zamrzání, pády a jiné poruchy. Mark Russinovich, když v roce 2008 psal o virtuální paměti Windows, to řekl přímo: když je dosaženo limitu potvrzení, alokace, které potvrzují paměť, selžou. Hra, která si v tu chvíli řekne o paměť, ji nedostane.

Odpověděl i na argument rychlosti. Někteří mají pocit, že bez stránkovacího souboru je výkon lepší, napsal, a u některých zátěží to tak být může; obecně ale stránkovací soubor dovolí Windows zapsat stránky, které se aktivně nepoužívají, a systému tak zbude víc použitelné paměti. Microsoftův úvod dodává, že některé produkty a služby stránkovací soubor vyžadují.

Potřebují ho i výpisy při pádu

Když Windows spadne s chybou Stop, záznam o tom, co selhalo, se ve výchozím stavu zapisuje přes stránkovací soubor. Microsoftova dokumentace k výpisům říká, že obsah RAM se zapisuje do stránkovacího souboru na oddílu, kde je nainstalovaný Windows, že stránkovací soubor musí být na spouštěcím svazku, aby funkce výpisu fungovala, a že pokud byl přesunut na jiný svazek, musí se vrátit zpět. S výchozím typem výpisu „Automatic memory dump“ (automatický výpis paměti) a se stránkovacím souborem nastaveným na „System managed size“ (velikost spravovaná systémem) nastaví Windows velikost stránkovacího souboru tak, aby šel většinou zachytit výpis paměti jádra.

Dialog virtuální paměti na to upozorňuje sám: pokud stránkovací soubor vypneš nebo nastavíš jeho počáteční velikost pod určitý počet megabajtů a dojde k systémové chybě, Windows nemusí zaznamenat podrobnosti, které by pomohly problém určit. Bez nich je zjistit, proč hra spadla, těžší.

Zkontroluj, jak blízko jsi stropu

Otevři Správce úloh, přejdi na Výkon a vyber Paměť. „Committed“ (potvrzeno) ukazuje dvě čísla: commit charge a pak limit potvrzení. Pokud se první během hraní blíží druhému, jsi blízko stropu, o kterém je tahle stránka, ať „In use (Compressed)“ (používáno, komprimováno) ukazuje cokoli.

Dva Microsoftovy průvodce dávají pro tento poměr trochu jiné prahy. Výkonnostní průvodce odkázaný výše považuje cokoli nad 75 % za blízko vyčerpání; Microsoftův aktuální průvodce řešením potíží s výkonem uvádí 0 až 50 % jako zdravý stav, 60 až 80 % jako varování a 80 až 100 % jako kritický stav.

Abys viděl, který program drží sliby, karta Podrobnosti má pro každý proces sloupec „Commit size“; „Select columns“ (vybrat sloupce) ho přidá, pokud je skrytý. Pokud už Windows paměť docházela, zapíše do protokolu System událost 2004 od Microsoft-Windows-Resource-Exhaustion-Detector se zprávou, která jmenuje programy, jež spotřebovaly nejvíc virtuální paměti. Tento příkaz PowerShellu vypíše posledních pět:

Get-WinEvent -FilterHashtable @{LogName='System'; ProviderName='Microsoft-Windows-Resource-Exhaustion-Detector'; Id=2004} -MaxEvents 5 | Format-List TimeCreated, Message

Pokud ohlásí, že nebyly nalezeny žádné události, protokol takovou událost neobsahuje.

Jak velký má být

Nech ho na „System managed size“. Průvodce velikostí říká, že stránkovací soubory jsou ve výchozím stavu spravované systémem a že správná velikost závisí na tvém nastavení výpisu při pádu a na tvém nejvyšším commit charge, je pro každý systém jedinečná a nedá se zobecnit. Russinovich ze stejného důvodu označil staré vzorce s násobky RAM za k ničemu.

Stránkovací soubor spravovaný systémem roste sám. Když commit charge překročí 90 procent limitu, zvětší se až na trojnásobek RAM nebo na 4 GB, podle toho, co je větší, ale ne víc než na osminu svazku, a jen pokud je na disku volné místo. Na disku, kde leží, nech trochu místa volného.

Existuje jedna zdokumentovaná výjimka. V KB 4055223, uvedeném pro Windows 10 a Windows 11, Microsoft popisuje náhodné chyby nedostatku paměti v programech, které často alokují paměť, a ty mohou pocházet ze zpoždění, zatímco automatický stránkovací soubor roste. Jeho řešením je vlastní velikost s počáteční velikostí 1,5násobku RAM, případně vyšší, pokud chyby pokračují. To je v rozporu s větou „nedá se zobecnit“ výše i s Russinovichem, takže to ber jako opravu tohoto jednoho příznaku, ne jako pravidlo.

Pro změnu nastavení stiskni Win+R a spusť SystemPropertiesAdvanced. V části „Performance“ (výkon) zvol „Settings...“ (nastavení), otevři kartu „Advanced“ (upřesnit) a v části „Virtual memory“ (virtuální paměť) zvol „Change...“ (změnit). Horní zaškrtávací políčko je „Automatically manage paging file size for all drives“ (automaticky spravovat velikost stránkovacího souboru pro všechny jednotky). Pod ním jsou pro každou jednotku „Custom size“, „System managed size“ a „No paging file“ (vlastní velikost, velikost spravovaná systémem, bez stránkovacího souboru). „Set“ (nastavit) použije volbu pro danou jednotku; pak vyber OK a restartuj PC.

Opotřebení SSD

Druhým důvodem, který se pro odstranění uvádí, je opotřebení SSD. Microsoftův inženýrský blog Windows 7 v telemetrii z roku 2009 hlásil, že čtení ze stránkovacího souboru převyšují zápisy zhruba 40 ku 1, a došel k závěru, že na SSD se hodí jen málo souborů lépe než stránkovací soubor. Jsou to čísla z roku 2009, takže je ber jako vzorec, ne jako dnešní hodnoty.

Pro představu u novějšího disku: Samsungův datový list 990 PRO z roku 2022 uvádí pro model 1 TB 600 TB zápisu v rámci pětileté omezené záruky, podle toho, co nastane dřív. Rovnoměrně rozloženo je to asi 330 GB zápisů denně po dobu pěti let; ten výpočet je náš, ne Samsungu.

Co nepomůže

Související

Pomohla ti tahle stránka?

Co chybělo, nebo co nefungovalo? Čteme každou jednu takovou zprávu.

Jestli tahle stránka problém nevyřešila, napiš nám — uveď, který článek jsi četl, a my ten článek opravíme.