[BSD] Fura processz ami fagy

Laszlo Nagy gandalf at shopzeus.com
2009. Júl. 28., K, 12:21:33 CEST


Elindul, egy idő után nem csinál semmit, kivéve hogy elkezdi zabálni a 
memóriát (kb. 3 másodpercenként 50MB-ot) és valamit számol, a processzor 
kb. 50%-ra megy föl.

kill nincs rá semmiféle hatással.

Próbáltam truss-olni és csupa "unknown system call" hívást írt ki, aztán 
lefagyott a truss is. Kilőttem a truss-t is, erre a top a következőt 
mutatta:

last pid: 66774; load averages: 2.66, 2.63, 2.61 up 5+06:46:58 05:50:46
274 processes: 2 running, 260 sleeping, 5 stopped, 7 zombie
CPU states: 8.9% user, 0.1% nice, 14.3% system, 0.3% interrupt, 76.4% idle
Mem: 1975M Active, 20G Inact, 758M Wired, 698M Cache, 214M Buf, 66M Free
Swap: 16G Total, 96K Used, 16G Free

PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
62522 shopzeus 5 96 0 756M 709M STOP 4 0:52 8.40% python


Szóval STOP státuszban van folyamatosan és még tovább számol valamit és 
továbbra is zabálja a memóriát.

kill -9 segítségével ki lehet lőni.

Ráadásul ez a program kb. 10 indításból csak egyszer csinálja ezt. De 
akkor aztán nem hagyja abba. Volt hogy véletlenül így maradt, végül az 
oprendszer egy csomó "out of swap space" üzenet logolása után megadta 
magát. (Ez azt jelenti hogy ez a processz elfogyaszott 24GB memóriát és 
16GB swap-et...)

A programról:

- én írtam :-)
- kapcsolódik két postgresql adatbázishoz
- kapcsolódik két IMAP szerverhez
- annyit csinál hogy IMAP szerverről leveleket olvas be, parse-olja őket 
és ennek megfelelően az adatbázisban update-el egy két dolgot
- a program Python-ban van írva tehát pointer hiba buffer underflow stb. 
kizárva, kivéve ha valamelyik extension library-ban van hiba (amit meg 
nem én írtam)
- a kb. egy héttel ezelőtti "portmaster -a" futtatás előtt nem volt vele 
ilyen probléma

Próbáltam plusz logolásokat is betenni a progiba, meg van már benne 
sigterm handler is. Amikor elküldöm neki a kill-t akkor kilogolja hogy 
megkapta, és befejeződik az összes szál amit elindított - ezeket is 
kilogolja. Szóval végül a főprogram befejeződik, csak annyi a probléma 
hogy a processz nem áll le hanem zabálja tovább a memóriát.

Én egy C-ben írt extension modul hibájára gyanakszom, de fogalmam nincs 
hogy találjam ki hogy melyik, mivel a truss-olás csak "unknown system 
call"-okat ír ki, meg még a tetejébe le is fagy.

Most azt csinálom hogy kézzel indítom el ezt a programot (aminek 
egyébként mindig futnia kellene) és ha látom hogy már megint barom akkor 
azonnal megy neki a kill -9. Ez így meg csütörtök óta de már unom...

Nos, mit lehet ilyenkor tenni?

L




További információk a(z) BSD levelezőlistáról