Manchmal müssen alle Verzeichnisse überprüft werden, in denen hugetlbfs gemountet wurde. Also,
-
finden Sie das gemountete Verzeichnis mit dem Befehl
mount | grep huge
. -
Überprüfen Sie jedes Verzeichnis, außer besonders
/dev/hugepages
. -
Löschen Sie alle 2M-großen Dateien. (2M ist die Größe einer Hugepage)
Verwenden Sie ipcs -m
um die gemeinsam genutzten Speichersegmente aufzulisten. Verwenden Sie ipcrm
um die verbleibenden Shared-Memory-Segmente zu entfernen.
Bearbeiten am 24.06.2019:Ok, die obige Antwort war zwar soweit richtig, aber etwas kurz. Insbesondere, wenn Sie einen Host mit mehreren DB-Instanzen haben und nur eine abgestürzt ist, wie können Sie bestimmen, welche (wenn überhaupt) Speichersegmente bereinigt werden sollten?
Nun, auch dies kann getan werden. Verbinden Sie sich für jede laufende Instanz mit / as sysdba
, dann oradebug setmypid
(Jede PID reicht aus, da alle Oracle-PIDs mit dem SGA verbunden sind). Führen Sie dann oradebug ipc
aus . Das wird (hoffentlich) IPC information written to the trace file
zurückgeben . Gehen Sie also in das Verzeichnis udump (oder diag_dest) und suchen Sie nach Ihrer Ablaufverfolgungsdatei. Es enthält alle IPC-Informationen für die Instanz. Dazu gehört ShmId
. Durchsuchen Sie die Datei nach der/den ShmId(s), die diese Instanz verwendet. Sehen Sie sich nun die Ausgabe von ipcs -m
an .
Wenn Sie dies für alle laufenden Instanzen getan haben, wird jedes Speichersegment von ipcs -m
ausgegeben das zeigt eine Speicherzuordnung ungleich Null, und das können Sie nicht im oradebug ipc
berücksichtigen Informationen von jeder laufenden Instanz müssen die verbleibenden Speichersegmente der abgestürzten Instanz sein. Verwenden Sie ipcrm
um es/sie zu entfernen.
Wenn Sie dies auf einem Host mit mehreren laufenden Instanzen tun, kann dies etwas mühsam sein. Bitte gehen Sie vorsichtig vor. Sie möchten die SGA einer laufenden Instanz nicht entfernen!
Hoffe das hilft....