podivne tuhnouci server

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Sobota Červen 16 15:25:54 CEST 2001


On Tue, 12 Jun 2001, David Janko wrote:

> napsal jsem server, ktery bezi klasicky pres inetd. Bohuzel se nekdy stava 
> (nejsem to schopen nasimulovat :(( ) ze serverovy proces bezi i kdyz spojeni 
> s klientem davno neexistuje a navic zere naprostou vetsinou CPU.
> Na doporuceni zde z konference jsem pridelal timeout po kterem by se mel 
> sestrilit sam (pomoci alarm()) - ale presto se nesestreli (pouze v techno 
> pripadech nenasimulovatelneho vytuhnuti - jinak samozrejme vse funguje, jak 
> ma :(( ).
[...]
> (gdb) attach 16771
> Attaching to program: /usr/local/medea/./medea, Pid 16771
> Reading symbols from /usr/lib/libmysqlclient.so.6...done.
[...]
> 0x4001d827 in net_real_write () from /usr/lib/libmysqlclient.so.6

Aha...my tady mluvime o spojeni, se kterym se pracuje nekde v hlubinach
klientskeho kodu k MySQL. Takze: 1. pravdepodobne se jedna o zadrhel
v knihovne libmysqlclient (resp. nejake nedorozumeni mezi nim a glibc
a/nebo kernelem), 2. nastaveni alarmu zvenci je velice pravdepodobne
marne, protoze libmysqlclient si to nejspis nejak prenastavi sam.

Podobne chyby uz jsem parkrat videl a vetsinou je to tak, ze program nejak
prehledne, ze spojeni skoncilo a zacne volat ve smycce nejaky syscall
(treba read()) a kdyz dostane chybu (coz dostane vzdycky), tak to zase
zkusi znovu atd. Zkuste 1. strace, abyste videl, co to vola za syscally,
2. libmysqlclient s ladicimi informacemi, abyste videl, co to tam provadi.

> (gdb) step
> Single stepping until exit from function net_write_command,
> which has no line number information.
> <nejde prerusit pres ctrl-c !?>

V GDB je nejaka chybka ci co, co zpusobuje, ze obcas nereaguje na Ctrl+C.
Jestli mne to nekdy nastve opravdu poradne, tak to treba zkusim najit a
opravit, ale zatim jsem to vzdycky nejak obesel. Treba AFAIK staci odjinud
provest kill -INT <pid ladeneho procesu>

Jinak k tomu keep-alive: da se nastavit na urovni TCP nejakym
syscallem. tcp_wrappers, kdyz dostanou direktivu keepalive, to umi. Ale
funguje to tak, ze jedna TCP vrstva kontroluje, ze zije druha TCP vrstva,
ale to, zda chodi nejaka data, to uz nikoho nezajima. Jestli to pomuze, to
je otazka.

--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."




Další informace o konferenci Linux