Někdy je potřeba zkontrolovat všechny adresáře, do kterých byl obrovskýtlbfs připojen. Takže
-
vyhledejte připojený adresář příkazem
mount | grep huge
. -
zkontrolujte každý adresář kromě
/dev/hugepages
. -
odstranit všechny soubory o velikosti 2M. (2M je velikost velké stránky)
Použijte ipcs -m
k zobrazení seznamu segmentů sdílené paměti. Použijte ipcrm
pro odstranění zbývajících segmentů sdílené paměti.
Edit dne 24.06.2019:Dobře, takže výše uvedená odpověď, i když je správná, pokud to jde, byla trochu stručná. Konkrétně, pokud máte hostitele s více instancemi DB a pouze jedna se zhroutila, jak můžete určit, které (pokud nějaké) segmenty paměti by měly být vyčištěny?
No, i tohle se dá zvládnout. Pro každou spuštěnou instanci se připojte s / as sysdba
a poté proveďte oradebug setmypid
(kterýkoli PID bude stačit, protože všechny Oracle PID se připojují k SGA). Poté proveďte oradebug ipc
. To (doufejme) vrátí IPC information written to the trace file
. Přejděte tedy do adresáře udump (nebo diag_dest) a vyhledejte svůj trasovací soubor. Bude obsahovat všechny informace IPC pro danou instanci. To bude zahrnovat ShmId
. V souboru vyhledejte ShmId(y), které tato instance používá. Nyní se podívejte na výstup ipcs -m
.
Když to uděláte pro všechny spuštěné instance, jakýkoli segment paměti bude mít hodnotu ipcs -m
která ukazuje nenulovou alokaci paměti a kterou nemůžete zohlednit v oradebug ipc
informace z jakékoli spuštěné instance, musí být zbývající segmenty paměti z havarované instance. Použijte ipcrm
k jejich odstranění.
Když to děláte na hostiteli s více spuštěnými instancemi, může to být trochu komplikované. Postupujte prosím opatrně. Nechcete odstranit SGA běžící instance!
Doufám, že to pomůže....