|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Vladimir Avilov 2:5020/400 02 Feb 2002 19:24:08 To : All Subject : DBI connect --------------------------------------------------------------------------------
Hi, All!
Хочется, чтобы при разрыве соединения с базой данных скрипт сам мог
переконнектиться. Я написал такой код (все лишнее выкинуто):
for(;;)
{
eval {$Base = DBI->connect($DataSource, $User, $Pass, \%Attr)};
last unless ($@);
sleep($Pause);
}
Пока соединение с базой есть, все работает отлично. Для проверки закрыл
файрволом коннект по нужному порту. Происходит следующее. С каждой итерацией
цикла возникает еще один процесс (похоже, где-то внутри DBI происходит
fork). Процессы со временем не умирают, т.е. сколько итераций прошло,
столько стало и процессов. Причем, процессы эти не умирают ни после того,
как соединение все-таки устанавливается, ни после $Base->disconnect
(специально проверял), а продолжают существовать до тех пор, пока не
завершится скрипт.
ttyp3$ ps -ax | grep perl
81569 p4 S+ 0:00.20 /usr/bin/perl -w ./db.rollback
81570 p4 Z+ 0:00.00 (perl)
81573 p4 Z+ 0:00.00 (perl)
81574 p4 Z+ 0:00.00 (perl)
81577 p4 Z+ 0:00.00 (perl)
81578 p4 Z+ 0:00.00 (perl)
81579 p4 Z+ 0:00.00 (perl)
Судя по букве Z, процессы - зомби. Это немного радует, но зачем они мне в
таких количествах?
ОС - FreeBSD 4.2, база - Oracle 8 с чем-то, версия perl - 5.005_03.
Сталкивался ли кто с подобной проблемой, и если да, то что все это значит?
--
Vladimir Avilov
ICQ UIN:68381224
--- ifmail v.2.15dev5
* Origin: Administration of Tambov Region (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/1694967e44a52.html, оценка из 5, голосов 10
|