venerdì, febbraio 08, 2013

Crashing Linux CentOS VMWare

- post<li> - Permalink

Crashing Linux CentOS VMWare

Descrizione del problema

Crashing Linux CentOS VMWare
Tra le Virtual Machine che gestisco ce ne era una biricchina che andava in crash senza apparenti particolari motivi.

Dovendo riavviarla a mano ogni volta, in attesa di trovare una soluzione permanente ho aggiunto a /etc/sysctl.conf la riga
kernel.panic = 20
in modo che si riavviasse in automatico in caso di problemi.

Anche con questa NON soluzione però il downtime era alto. Questo significava che il crash non era secco e definitivo, ma il SO prima di cedere completamente, "languiva", soffriva, per diversi minuti.

Essendo una VM Linux CentOS che fa hosting per siti web dinamici, ho subito pensato che fosse un problema legato al consumo eccessivo di RAM da parte di mysqld o di httpd magari scatenato da qualche DOS.
Appurato dall'analisi dei log degli stessi che non si trattava di questo, ho provato ad aumentare la RAM a disposizione della VM.

Aumentare la RAM a disposizione della VM non ha risolto il problema!

Cosa fare?

Diagnosi

Per diagnosticare il problema, intuendo che fosse qualcosa relativo alla memoria ho aggiunto il seguente comando al "crontab -e"
0 * * * * /usr/bin/top -b -d 60 -n 60 > /tmp/top.$(date "+\%Y-\%m-\%d_\%H:\%M").log
che mi ha prodotto una serie di file (1 ogni ora) con il campionamento ogni minuto dello stato del sistema e di eventuali processi "simpatici".
Dall'analisi di questi file, negli orari in cui si sono verificati i problemi, mi sono saltati subito agli occhi i dati in neretto.
---------------------------------------------------------------------------
top - 13:17:37 up 22:47,  1 user,  load average: 35.22, 16.17, 6.38
Tasks: 134 total,  37 running,  97 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,100.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3107156k total,  2988996k used,   118160k free,      136k buffers
Swap:   524280k total,   524280k used,        0k free,     7288k cached
---------------------------------------------------------------------------
buco nei log
---------------------------------------------------------------------------
top - 14:33:14 up 1 day, 2 min,  1 user,  load average: 69.21, 67.62, 63.53
Tasks: 164 total,  69 running,  95 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,100.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3107156k total,  2988872k used,   118284k free,      108k buffers
Swap:   524280k total,   524280k used,        0k free,     6112k cached
---------------------------------------------------------------------------
riavvio
---------------------------------------------------------------------------
top - 15:05:13 up 1 day, 34 min,  1 user,  load average: 28.66, 63.10, 68.51
Tasks: 130 total,   1 running, 129 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.5%us, 94.9%sy,  0.2%ni,  3.8%id,  0.5%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3107156k total,  1148188k used,  1958968k free,    14880k buffers
Swap:   524280k total,   171828k used,   352452k free,   175056k cached
---------------------------------------------------------------------------
Si tratta del classico problema del Trashing! Bingo! Bisogna aumentare lo spazio di SWAP non la RAM disponibile!

Soluzione (Cura) - attenzione si sta operando su LVM - basta un attimo di distrazione per perdere tutti i dati!

  1. Aggiungere un disco alla Virtual Machine, io ne ho aggiunto uno da 2GB.
  2. Riavviare
  3. Leggere nel dmesg per riconoscere il disco. Es. nel mio caso
    SCSI device sda: 83886080 512-byte hdwr sectors (42950 MB)
    sda: Write Protect is off
    sda: Mode Sense: 61 00 00 00
    sda: cache data unavailable
    sda: assuming drive cache: write through
    SCSI device sda: 83886080 512-byte hdwr sectors (42950 MB)
    sda: Write Protect is off
    sda: Mode Sense: 61 00 00 00
    sda: cache data unavailable
    sda: assuming drive cache: write through
     sda: sda1 sda2
    sd 0:0:0:0: Attached scsi disk sda
      Vendor: VMware    Model: Virtual disk      Rev: 1.0
      Type:   Direct-Access                      ANSI SCSI revision: 02
     target0:0:1: Beginning Domain Validation
     target0:0:1: Domain Validation skipping write tests
     target0:0:1: Ending Domain Validation
     target0:0:1: FAST-40 WIDE SCSI 80.0 MB/s ST (25 ns, offset 127)
    SCSI device sdb: 4194304 512-byte hdwr sectors (2147 MB)
    sdb: Write Protect is off
    sdb: Mode Sense: 61 00 00 00
    sdb: cache data unavailable
    sdb: assuming drive cache: write through
    SCSI device sdb: 4194304 512-byte hdwr sectors (2147 MB)
    sdb: Write Protect is off
    sdb: Mode Sense: 61 00 00 00
    sdb: cache data unavailable
    sdb: assuming drive cache: write through
     sdb: unknown partition table
    sd 0:0:1:0: Attached scsi disk sdb
    
    
  4. Ora compare con
    > pvscan
      PV /dev/sda2   VG VolGroup00      lvm2 [39,88 GB / 0    free]
      PV /dev/sdb                       lvm2 [2,00 GB]
      Total: 2 [41,88 GB] / in use: 1 [39,88 GB] / in no VG: 1 [2,00 GB]
    
  5. Aggiungiamo il nuovo disco a VolgGroup00 con il comando
    #vgextend "VolGroup00" /dev/sdb
      Volume group "VolGroup00" successfully extended
    
  6. Ancora con
    >pvscan
      PV /dev/sda2   VG VolGroup00   lvm2 [39,88 GB / 0    free]
      PV /dev/sdb    VG VolGroup00   lvm2 [1,97 GB / 1,97 GB free]
      Total: 2 [41,84 GB] / in use: 2 [41,84 GB] / in no VG: 0 [0   ]
    
  7. Bene, ora abbiamo aggiunto il disco al VG (Volume Group), si possono seguire i passi indicati nell'articolo "17.2. Adding Swap Space" per aumentare lo spazio Swap. Quindi:
    # swapoff -v /dev/VolGroup00/LogVol01
    swapoff su /dev/VolGroup00/LogVol01
    
    #lvresize -l +100%FREE /dev/VolGroup00/LogVol01
      Extending logical volume LogVol01 to 2,47 GB
      Logical volume LogVol01 successfully resized
    
    # mkswap /dev/VolGroup00/LogVol01
    Impostazione spazio di swap versione 1, dimensione = 2650796 kB
    
    #swapon -v /dev/VolGroup00/LogVol01
    swapon su /dev/VolGroup00/LogVol01
    
  8. Ora si monitora ancora per un po' il log del "top" e se tutto è ok si rimuove la riga dal "crontab -e"
Questo è uno dei classici problemi abbastanza astrusi da diagnosticare, la cui "cura", per fortuna, risulta piuttosto semplice.

A voi è mai capitato?

Byez

Cuddy: Non nuocere è un punto fermo.
House: Si studia al secondo anno, vero? Ho avuto la mononucleosi quel quadrimestre.

Nessun commento:

Articoli correlati divisi per etichetta



Widget by Hoctro