powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Демоны apache (perl) и висячие соединения на Oracle
3 сообщений из 3, страница 1 из 1
Демоны apache (perl) и висячие соединения на Oracle
    #32527026
Тестер2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый localtime, ALL

Ситуация следующая:
Стоит apache с mod_perl, лежит скрипт script.pl, в котором производится коннект к oracle-серверу через oracle_client7 (все это стоит на freebsd, только на разных машинах). Проблема в том, что частенько появляются зомби apache, причем именно по три штуки на каждый запуск script.pl.
Было замечено, что зомби появляются script.pl меняет номер дочернего процесса (если script.pl запускается с тем же номером процесса что и в предыдущий раз то зомби не появляются). Таким образом apache, имея при запуске некоторый набор дочерних процессов для обработки в том числе запусков script.pl из под mod_perl постпенно отдает их под зомби, а себе с каждым появлением зобми создает новый дочерний процесс (надеюсь более мнее понятно объяснил).
В итоге выяснилось, что зомби создаются потому, что script.pl создает по 3 процесса при каждом своем запуске, с помощью которых обращается к Oracle.
Проблема зомби решилась тем, что был добавлен код:

while($mp = waitpid(-1,WNOHANG)) {
if($mp == -1) {last}
}
exit(0);

в итоге теперь script.pl ждал завершения всех своих потомков (которых напомю всего 3 штуки каждый раз) и уже потом завершался сам.

Но это не решило проблемы со множеством открытых соединений на сервере Oracle, а это слишком ресурсоемко.

(дополнение: все открываемые handle'ы в script.pl закрываются принудительно, и принудительно делается $dbh->disconnect, закрытия всех хендлов проходят без ошибок)

Вопрос: почему соединения не закрываются? где копать: в DBI или в клиенте Oracle? или в ДНК? ;)

Заранее благодарен
--
Артем
...
Рейтинг: 0 / 0
Демоны apache (perl) и висячие соединения на Oracle
    #32527453
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое oracle_client7 ? :-(

Мы использовали оракл и мод_перл три года назад, до тех пор, как перешли на постгрес. Коннект к ораклу делался через DBI, только кажется DBD::Oracle был не последним, а каким-то из старых версий, так как с последним возникали проблемы. Лишнего, и тем более трех, апачевских процессов при коннекте не рождалось. Но, конечно, на каждый коннект рождались процессы оракла.

script.pl создает по 3 процесса при каждом своем запуске, с помощью которых обращается к Oracle

Кто именно, script.pl или DBD::Oracle или кто-то еще, fork-ает эти процессы? И, если известно, для чего? :-)
...
Рейтинг: 0 / 0
Демоны apache (perl) и висячие соединения на Oracle
    #32528701
Тестер2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что такое oracle_client7?
клиент оракла седьмой версии (я образно написал ;)

Мы использовали оракл и мод_перл три года назад, до тех пор, как перешли на постгрес. Коннект к ораклу делался через DBI, только кажется DBD::Oracle был не последним, а каким-то из старых версий, так как с последним возникали проблемы. Лишнего, и тем более трех, апачевских процессов при коннекте не рождалось. Но, конечно, на каждый коннект рождались процессы оракла.

процессы не апачевские, а дочерние к script.pl

Кто именно, script.pl или DBD::Oracle или кто-то еще, fork-ает эти процессы? И, если известно, для чего? :-)

script.pl не форкает, кто это делает незнаю
--
вообщем дополнительная информация:
>pg 6109
apache 61090 17475 17475 ...
apache 61091 17475 17475 ...
apache 61092 17475 17475 ...

из лога script.pl:
[16:22:12] start script.pl pid: 61091, parent pid: 17475
[16:22:14] stop script.pl pid: 61091, parent pid: 17475
[16:40:54] start script.pl pid: 61092, parent pid: 17475
[16:40:57] waitpid script.pl pid: 61092, parent pid: 17475 child pid: 97112
[16:40:57] waitpid script.pl pid: 61092, parent pid: 17475 child pid: 97111
[16:40:57] waitpid script.pl pid: 61092, parent pid: 17475 child pid: 97110
[16:40:57] stop script.pl pid: 61092, parent pid: 17475

после отработки script.pl его дочерние пропадают, но остается открытое соединение:
>sockstat|grep 1521
apache httpd 61092 x.x.x.x:1413 y.y.y.y:1521
apache httpd 61091 x.x.x.x:1066 y.y.y.y:1521

напомню: $dbh->disconnect есть в script.pl

вопрос: кто не закрывает сокет: DBD или клиент оракла? и как с этим бороться?
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Демоны apache (perl) и висячие соединения на Oracle
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]