Cosa * esattamente * viene fregato quando uccido -9 o tiro il potere?


13

Impostare

Sono programmatore da un po 'di tempo ormai, ma sono ancora un po' confuso su cose interne profonde.

Adesso. Sono ben consapevole che non è una buona idea neanche:

  1. uccidere -9 un processo (cattivo)
  2. staccare spontaneamente la spina di alimentazione su un computer o un server in esecuzione (peggio)

Tuttavia, a volte devi semplicemente farlo. A volte un processo non risponde a prescindere da ciò che fai, e a volte un computer non risponde, a prescindere da ciò che fai.

Supponiamo che un sistema esegua Apache 2, MySQL 5, PHP 5 e Python 2.6.5 tramite mod_wsgi.

Nota: sono più interessato a Mac OS X qui, ma una risposta che riguarda qualsiasi sistema UNIX mi aiuterebbe.

La mia preoccupazione

Ogni volta che devo fare uno di questi, specialmente il secondo, sono molto preoccupato per un periodo di tempo che qualcosa si è rotto. Alcuni file da qualche parte potrebbero essere corrotti - chi sa quale file? Ci sono oltre 1.000.000 di file sul computer.

Uso spesso OS X, quindi eseguo un'operazione "Verifica disco" tramite l'Utility disco. Non segnalerà alcun problema, ma sono ancora preoccupato per questo.

Che cosa succede se un file di configurazione da qualche parte viene rovinato. O peggio ancora, cosa succede se un file binario da qualche parte è corrotto. O un file di script da qualche parte è corrotto ora. Cosa succede se parte dell'hardware è danneggiato?

E se non lo scoprissi fino al mese prossimo, in uno scenario critico, quando la corruzione o il danno provocano una catastrofe?

Oppure, se i dati preziosi sono già persi?

La mia speranza

La mia speranza è che queste preoccupazioni e preoccupazioni siano infondate. Dopotutto, dopo averlo fatto molte volte prima, non è ancora successo nulla di veramente brutto. Il peggio è che ho dovuto riparare alcune tabelle di MySQL, ma non mi sembra di aver perso alcun dato.

Ma se le mie preoccupazioni non sono infondate e un danno reale potrebbe verificarsi in entrambe le situazioni 1 o 2, la mia speranza è che ci sia un modo per rilevarlo e prevenirlo.

Le mie domande)

Ciò potrebbe essere dovuto al fatto che i moderni sistemi operativi sono progettati per garantire che nulla venga perso in questi scenari? Potrebbe essere perché il software moderno è progettato per garantire che nulla sia perso? Che dire del design hardware moderno? Quali misure sono in atto quando si estrae la spina di alimentazione?

La mia domanda è, per entrambi questi scenari, cosa può andare esattamente storto e quali misure dovrebbero essere prese per risolverlo?

Ho l'impressione che una cosa che può andare storto è che alcuni programmi potrebbero non aver scaricato i loro dati sul disco, quindi tutti i dati molto recenti che avrebbero dovuto essere scritti sul disco (diciamo, pochi secondi prima del power pull ) potrebbe andare perso. Ma che dire oltre? E questo problema della perdita di dati in 5 secondi può rovinare un sistema?

Che dire della corruzione di file casuali che si nascondono da qualche parte nell'enorme foresta di file sui miei dischi rigidi?

Che dire del danno hardware?

Cosa mi aiuterebbe di più

  1. Descrizioni dettagliate su ciò che accade internamente quando si uccide -9 un processo o si alimenta l'intero sistema. (sembra istantaneo, ma qualcuno può rallentarlo per me?)

  2. Spiegazioni di tutte le cose che potrebbero andare storte in questi scenari, insieme a probabilità (approssimative ovviamente) (cioè, è molto improbabile, ma è probabile) ...

  3. Descrizioni delle misure in atto nei moderni hardware, sistemi operativi e software, per prevenire danni o corruzione quando si verificano questi scenari. (per confortarmi)

  4. Istruzioni su cosa fare dopo un kill -9 o un power pull, oltre a "verificare il disco", al fine di assicurarsi davvero che nulla sia corrotto o danneggiato da qualche parte sul disco.

  5. Misure che possono essere prese per fortificare una configurazione del computer in modo che se qualcosa deve essere ucciso o il potere deve essere tirato, ogni potenziale danno viene mitigato.

  6. Alcune informazioni sui file binari - non è vero che il file binario apache o qualche libreria potrebbe avere un byte casuale o due corrotto nel mezzo, che non verrebbero fuori e causerebbero un problema fino a dopo? Come posso assicurarmi che ciò non è accaduto a causa della presa di potere o dell'uccisione?

Grazie mille!


Quali processi stai inviando kill -9? Citi "Apache 2, MySQL 5, PHP 5 e Python 2.6.5 tramite mod_wsgi". Stai uccidendo alcuni di questi. Sapere cosa stai uccidendo consentirà una risposta più diretta delle implicazioni nel farlo. Inoltre, ciò che sta effettivamente accadendo per farti desiderare di uccidere i processi. Sappi questo e potresti essere in grado di identificare le cause alla radice del tuo problema piuttosto che comprendere semplicemente le implicazioni del tuo metodo della forza bruta per risolverlo. A proposito, su MacOS X, per le macchine moderne tenere premuto il pulsante di accensione per 10 secondi anziché semplicemente tirare la potenza, è meno brutale.
Graham Dumpleton,

Non so di uccidere -9 ma a meno che tu non abbia una sorta di alimentatore di backup, penso che sia abbastanza sicuro dire che TUTTO viene ucciso quando si stacca la spina di alimentazione.
John Gardeniers,

Risposte:


9

Tirando il potere, tutto si ferma in volo, senza preavviso. kill -9 ha lo stesso effetto su un singolo processo, terminandolo forzatamente con un SIGKILL .

Se un processo viene interrotto dal kernel o da un'interruzione dell'alimentazione, non esegue alcuna pulizia. Ciò significa che potresti avere file scritti a metà, stati incoerenti o cache perse. Di solito non devi preoccuparti di nulla di tutto ciò a causa del journaling, dello stato di uscita e del backup della batteria.

I file temporanei in / tmp spariranno automaticamente se si trovano in tmpfs, ma potresti comunque disporre di file di blocco specifici dell'applicazione da rimuovere, come il blocco e .parentlock per firefox.

La maggior parte dei software è abbastanza intelligente da riprovare una transazione se non registra uno stato di uscita riuscito. Un buon esempio di questo è un tipico sistema di posta. Se un messaggio viene recapitato, ma viene interrotto nel mezzo, il mittente riproverà più tardi fino a quando non avrà successo.

Il tuo filesystem è probabilmente registrato su giornale. Se si sta spostando o scrivendo un file e questo si interrompe a metà flusso, il file system registrato su giornale farà comunque riferimento all'originale. Il filesystem journaled effettuerà le modifiche in modo non distruttivo, lasciando la vecchia copia, quindi farà riferimento alla nuova copia solo come ultimo passaggio prima di recuperare lo spazio occupato dalle vecchie copie sul disco.

Ora, se si dispone di un array RAID, ha tutti i tipi di buffer di memoria per aumentare le prestazioni e fornire affidabilità in caso di interruzione di corrente. Molto probabilmente il tuo filesystem non conoscerà le cache nel dispositivo e il loro stato, quindi pensa che una modifica sia stata impegnata sul disco, ma è ancora nella cache RAID da qualche parte. Quindi cosa succede quando il potere muore? Spero che tu abbia una batteria funzionale nel tuo contenitore RAID e la controlli. Altrimenti hai un file system corrotto da fsck.

Sì, alcuni bit possono essere danneggiati in un binario, ma non mi preoccuperei così tanto dell'hardware moderno. Se sei veramente paranoico, puoi monitorare lo stato dei tuoi dischi e RAID con gli strumenti appropriati, ma dovresti comunque farlo. Eseguire backup regolari e ottenere un gruppo di continuità.


5

In un arresto imprevisto, gli unici file che dovrebbero essere danneggiati sono i file aperti per la scrittura. Sulla maggior parte dei sistemi in un dato momento, probabilmente non stai scrivendo su un file. Probabilmente.

1 uccisione -9

è POSIX SIGKILL e dipende dall'implementazione. Il processo che riceve questo segnale non avrà l'opportunità di gestirlo.

1 Spegnimento

dipende dall'hardware. Le testine si auto-parcheggiano sotto lo slancio dell'unità e tutto nella cache di scrittura perde l'aggiornamento della DRAM e decade in un danneggiamento irreparabile in pochi secondi. Lo stesso accade per la memoria di sistema, la cache della CPU, i registri, ecc.

Da wdc.com (google: site: wdc.com Parking Head protettivo)

Potenza persa: il disco rigido viene ripristinato. La testa è parcheggiata nella zona di atterraggio usando l'energia del mandrino. Motore mandrino fermo.

2 - cosa può andare storto

i file lasciati aperti vengono scritti in modo incompleto. Se un file viene aperto per la scrittura, ci sarà il danneggiamento dei dati. Le scritture di file nell'hardware moderno sono veloci e i PC moderni non sono normalmente stressati con IO. È come camminare con gli occhi bendati su una tranquilla strada di campagna. Il più delle volte, starai bene.

3 - contromisure

vedi sopra per cosa fanno i dischi.

Cerca i file system registrati su giornale, ora sono normali: http://en.wikipedia.org/wiki/Journaling_file_system

Software come MS Word o vi scriveranno su un file temporaneo anziché sull'originale. L'obiettivo è non lasciare mai il sistema in uno stato in cui non esiste una copia coerente sul disco.

Windows conserva copie del registro (è troppo importante) Wikipedia: "Windows 2000 conserva una copia alternativa degli alveari del registro (.ALT) e tenta di passare ad esso quando viene rilevata la corruzione" (da allora non ho più fornito supporto tecnico Win2k, quindi non sono sicuro di quali siano i nuovi meccanismi di MS)

4 - cosa fare

In ordine di difficoltà (facile)

  • Mantieni backup
  • Controlla a cosa stavi lavorando l'ultima volta
  • Avvia da un disco separato e cerca le ultime date / ore modificate per capire cosa potrebbe aver fatto il sistema al momento del crash
  • Avvia da un disco separato e confronta md5sums di tutti i tuoi file con una copia offline.

Mantenere i backup è la risposta più appropriata, i buoni backup dovrebbero farti tornare alla versione precedentemente modificata.

5

Potenza ridondante? Formazione per l'utente finale? mettere nastro e cartone sopra il pulsante di accensione?

6

A corto di malfunzionamenti hardware, driver di disco danneggiati, un kernel del sistema operativo rotto, un'assenza di checksum o arresti anomali durante gli aggiornamenti, i binari e le librerie non vengono aperti in lettura / scrittura in modo da non essere danneggiati. Succede, ma è raro.


+1 per il punto 6
Bigbio2002,

4

Per quanto riguarda un'uccisione -9, questo invia un segnale al processo per "morire" sul posto. Il processo muore (a meno che non si trovi in ​​un sonno ininterrotto, nel qual caso diventa uno zombi). Nessun file viene chiuso, nessun dato viene scritto e il programma non può catturare questo segnale e fare qualcos'altro. Nessuna pulizia, niente di niente: muore.

I file system oggi sono molto robusti; cose come XFS, JFS, ext3 ed ext4 hanno tutte riviste e altre cose per mantenere intatti i metadati del filesystem.

I binari come Apache stesso e altri non rischiano di essere danneggiati da un'improvvisa perdita di potenza o da un'uccisione del sistema, poiché sono in memoria o vengono letti; se vengono letti da (ad esempio, Apache HTTP si avvia ad esempio) è possibile che un aumento di potenza possa danneggiare il binario, ma sembra improbabile.

Ho un Mac Mini alla gente sembra voler spegnere il freddo (non importa quante volte glielo dico .....) e continua a funzionare.

Per la maggior parte, fintanto che non fai affidamento sull'uccisione -9 o lo spegnimento regolare, non mi preoccuperei troppo. Le cose andavano molto peggio in passato; Mi preoccuperei di più (ad esempio) di Solaris 2.6 di quanto non farei con Solaris 10 (e così via).



3

Un "kill -9" non sincronizzerà un'operazione IO in sospeso. Questo spesso non è un problema, ma se il sistema è sottoposto a un forte carico di I / O, potresti perdere dati.

È più un problema con i server, in cui il controller RAID (senza cache alimentata a batteria) può scrivere nella cache e perdere i dati.

Modifica : un'altra cosa ... se si dipende da unità montate in rete e si hanno handle di file aperti, è molto probabile che il file sia incoerente o danneggiato. Su Windows, il classico esempio di ciò in cui vedi questo è quando gli utenti montano i file PST di Outlook su una condivisione e perdono energia o connettività di rete.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.