A volte è necessario controllare tutte le directory in cui è stato montato hugetlbfs. Quindi,
-
trova la directory montata con il comando
mount | grep huge
. -
controlla ogni directory tranne in particolare
/dev/hugepages
. -
eliminare tutti i file di dimensioni 2M. (2M è la dimensione di hugepage)
Usa ipcs -m
per elencare i segmenti di memoria condivisa. Usa ipcrm
per rimuovere i segmenti di memoria condivisa rimanenti.
Modifica il 24/06/2019:Ok, quindi, la risposta sopra, sebbene corretta per quanto va, è stata un po 'breve. In particolare, se disponi di un host con più istanze database e solo una si arresta in modo anomalo, come puoi determinare quali (se presenti) segmenti di memoria devono essere ripuliti?
Ebbene, anche questo si può fare. Per ogni istanza in esecuzione, connettiti con / as sysdba
, quindi esegui oradebug setmypid
(qualsiasi pid andrà bene, poiché tutti i PID Oracle si connettono all'SGA). Quindi esegui oradebug ipc
. Ciò restituirà (si spera) IPC information written to the trace file
. Quindi, vai nella directory udump (o diag_dest) e cerca il tuo file di traccia. Conterrà tutte le informazioni IPC per l'istanza. Questo includerà ShmId
. Cerca nel file gli ShmId utilizzati da questa istanza. Ora guarda l'output di ipcs -m
.
Dopo averlo fatto per tutte le istanze in esecuzione, qualsiasi segmento di memoria emesso da ipcs -m
che mostra un'allocazione di memoria diversa da zero e che non puoi spiegare nel oradebug ipc
informazioni da qualsiasi istanza in esecuzione, devono essere i segmenti di memoria rimasti dall'istanza in crash. Usa ipcrm
per rimuoverlo/i.
Quando si esegue questa operazione su un host con più istanze in esecuzione, questo può essere un po' complicato. Si prega di procedere con cautela. Non vuoi rimuovere l'SGA di un'istanza in esecuzione!
Spero di esserti stato d'aiuto....