Utilizzando SIGKILL
() al posto dei più comuni SIGTERM
(senza parametri) o SIGHUP
(-1
): il processo viene ucciso a livello di sistema operativo. Mongo conserva molti dati in memoria come cache, sia per la lettura che per la scrittura. L'utilizzo di SIGKILL
potrebbe quindi significare che i dati sono stati scritti a metà su disco o non verranno mai scritti affatto. In entrambi i casi è possibile ottenere un database danneggiato o finire con la perdita dei dati comunicati agli utenti o ad altri processi come archiviati correttamente. I sistemi di database "classici" aggirano questo problema utilizzando i registri delle transazioni (un panico del kernel o interruzione di corrente è essenzialmente lo stesso effetto), ma Mongo è considerato "nosql" per buone ragioni, tra cui in particolare la mancanza di integrità transazionale.
Questo vale solo per il processo del server, ovviamente, è possibile uccidere i processi del nodo in qualsiasi modo si desideri dalla prospettiva di mongo. Tuttavia, in generale, è necessario evitare di utilizzare kill -9
per eliminare il processo qualsiasi, per gli stessi motivi illustrati sopra. I processi che non possono essere ripuliti tendono a lasciare un disastro. Il solito ordine è:
kill <pid>
...Invia SIGTERM
, chiedendo un arresto regolare, quindi attendere 30 secondi per il processo di chiudere, se è ancora vivo:
kill -1 <pid>
... Invia SIGHUP
, chiedendo l'arresto immediato, attendere altri 30 secondi almeno per il processo per chiudere, e infine:
kill -9 <pid>
... Se, e solo se , il processo non può essere permesso di continuare l'esecuzione, perché sta causando problemi nella stabilità del server o le risorse di blocco. In tutti gli altri casi, aspetta.
Per le differenze tra arresto "normale" e "immediato" menzionato sopra, prendere in considerazione un numero notepad.exe
in cui sono state digitate 2 righe. Grazioso apre una finestra di dialogo in cui si chiede se si desidera salvare, l'immediato si chiude semplicemente senza l'interazione dell'utente e "kill" interrompe immediatamente il processo e rilascia tutte le risorse di memoria e di altro tipo nel sistema. Storicamente i segnali provengono dai vecchi mainframe dial-in, dove SIGHUP
è l'abbreviazione di "Hangup", a indicare che l'utente è rimasto e non può tornare.
fonte
2015-07-01 19:41:52
* "Inoltre, perché Mongo mette in guardia contro l'utilizzo di kill -9 per terminare un'istanza mongod?" * La mia ipotesi sarebbe quella di evitare la perdita di dati. non vorrai uccidere il processo nel bel mezzo di una transazione. –
Forse non sei abbastanza paziente usando un altro segnale –