[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