[Linux-Biella] segmentation fault

Daniele linux@ml.bilug.linux.it
Sat, 19 Jun 2004 09:10:06 +0200


On Thu, Jun 17, 2004 at 09:00:58PM +0200, Emanuele Aina wrote:

> >Avvenuta quella la macchina non si riprende bene e rimane acciacata tanto 
> >da consigliare il rebooting per riaverla pienamente sana.
> 
> Mmmmh... Il mistero si infittisce. Normalmente un segfault non comporta 
> alcun problema per il sistema, il quale termina senza tanti complimenti 
> il programma e prosegue per la sua strada.

Ho verificato: uno o due segfault non recano danno irreversibile al sistema.
Il programma pero' ripete il comando anche molte centinaia di volte, creando
altrettanti segfault.
Forse in questa situazione estrema il sistema perde almeno in parte il
controllo dei puntamenti alla memoria.
Un bel test per la solidita' del kernel e dell' hardware.

> Sei certo che il segfault sia della bash e non del client sql?
> In che riga esattamente si inchioda?

L' ho colto con le mani nel sacco quando mi ha lasciato la macchina funzionante.

Avevo cosi' modificato la funzione alleggerendola ed introducendo uno sleep per test:

iema(){
echo " *** aggiorno mm 200 azione $azi ultimi $gg giorni 
 *** scrivo lista azioni in data0 su /gp/tmp0"
echo > /gp/sql0 "
CONNECT dan;
SELECT valazimed.nome
FROM valazimed, data0
WHERE valazimed.data=data0.data
AND nome like '$azi'
ORDER BY valazimed.nome;"
mysql -N < /gp/sql0 > /gp/tmp0
echo " *** fatto
 *** scrivo ultime $gg date di MIB30 in /gp/tmp1"
echo > /gp/sql1 "
CONNECT dan;
SELECT data
FROM valazimed
WHERE nome like 'MIB30'
ORDER BY data desc
LIMIT $gg;"
mysql -N < /gp/sql1 > /gp/tmp1
echo " *** fatto" 

for nome in `cat /gp/tmp0`
do
echo "   
**********  $nome  ********** 
 *** elaboro ultime $gg mm200
 *** ed inserisco in mm200azi
 ***       ATTENDERE"
for data in `cat /gp/tmp1`
do
echo > /gp/sql2 "
CONNECT dan;
drop table if exists tmp1;
create table tmp1(
datamm date,
valret double(10,3));
INSERT tmp1
SELECT
data,
valore*ret
FROM valazimed
WHERE nome like '$nome'
AND data < '$data'
ORDER BY data desc
LIMIT 200;
REPLACE mm200azi
SELECT 
'$nome',
'$data',
AVG(valret)
FROM tmp1;"
mysql < /gp/sql2     # <--  QUESTO E' IL COMANDO CHE INCHIODA I PROCESSI
done
echo " *** fatto"
sleep 1
done
echo " *** elimino in mm200azi mm200=0"
echo > /gp/sql3 "
CONNECT dan;
DELETE FROM mm200azi
WHERE mm200=0;"
mysql < /gp/sql3
echo "fatto"
echo > /gp/sql4 "
CONNECT dan;
SELECT *
FROM valazimed
WHERE nome like '$azi'
ORDER by data desc
LIMIT 30"
mysql -t < /gp/sql4
# > /gp/dati0
#xterm -bg beige -fg blue -g 35x15 -e less /gp/dati0 &
ie
}

E' quindi legato alla pesante reiterazione di una query di mysql non saprei
se il problema dipenda dal client, dal server mysqld o da quanto gli sta a
monte.
Vedro' di capire.

Grazie a te e tutti per l' aiuto.

-- 

      Vallini Daniele

+-----------------------------------------------------------------------+
| Per lavorare  con efficienza  utilizzo unicamente  Linux  e files nei |
| formati unificati ed affidabili.  Per cortesia quindi non .doc o .xls |
+-----------------------------------------------------------------------+