ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 

  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА














     АРХИВ :: Apache-Talk
Apache-Talk mailing list archive (apache-talk@lists.lexa.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Re: [apache-talk] KeepAlive



---------- Forwarded message ----------
From: Даниил Меграбян <danil.megrabjan@xxxxxxxxx>
Date: 15.08.2007 14:52
Subject: Re: [apache-talk] KeepAlive

На самом деле, чуть-чуть разобрался. На пути к истине...

За /server-status спасибо. Пригодится, при дальнейших танцев с бубном.

К чему я пришел. Апачи прав во всем, что он делает :). На самом деле,
3-ая попытка, которую я описывал как последнюю - приводила к
segmentation fault. Завелся через gdb  и оказалось, что падаем мы на
#0  0xb7cc7f49 in free () from /lib/libc.so.6. Кому интересно
http://bugs.php.net/bug.php?id=42305. Речь не о том, это так, к слову.
По сути получается так. Если Keep-alive процесс апачи - занят, или его
уже не существует ( по причине, к примеру такого segmentation fault)
то запрос будет отправлен на обработку в другой форк, что, с точки
зрения апачи - логично. Но. Как это всегда бывает, "наши желания не
сходятся  с нашими возможностями". Ребят, я знаю что это идеологически
неправильно, тем более работая у apache за пазухой. Но. Мне нужно
нужно всегда обрабатываться в одном и том же процессе апача(это
связанно с постоянным коннэктом к бд, временными таблицами и все что
из этого выткает). И нужно если процесс занят, то каким-то образом
организовать ожидание освобождения апача. Переписывать prefork.c будет
наверное слишком крутым извращением.

15.08.07, Pronichev Alexander<dyker@xxxxxxxxx> написал(а):
> Попробуйте поставить /server-status/
>
>                 <Location /server-status>
>                         SetHandler server-status
>                         Order deny,allow
>                         AuthType Basic
>                         AuthName "Restricted Files"
>                         AuthBasicProvider file
>                         AuthUserFile ....
>                         Require valid-user
>                 </Location>
> Для этого должен быть модуль mod_status. Потом зайдите на http://host/server-status/ и посмотрите находятся ли чилды в состоянии KeepAlive. Проверьте параметры:
> KeepAlive
> KeepAliveTimeout
> MaxKeepAliveRequests
>
> Клиент у вас случаем не использует HTTP/1.0?
>
>
> On Mon, 13 Aug 2007 15:45:08 +0400
> "Даниил Меграбян" <danil.megrabjan@xxxxxxxxx> wrote:
>
> > >
> > > Господа, не совсем понимаю сути KeepAlive, от того наверное проблема и
> > > возникла... пните в нужную сторону.
> > >
> > > OS: SLES10 ( OpenSuse )
> > > - Apache 2.2.4 (prefork)
> > > - php 5 (mod)
> > > - unixODBC
> > >
> > > Очень необходимы (постоянные соединения с бд), для пользования
> > > времянками и т.п...
> > >
> > > Для этого сделаны: в unixODBC выставлен pooling конэктов к бд, keepalive on 600.
> > >
> > > Как должно получиться в идеале. "Браузер 1" грузит index.php. В
> > > скрипте устанавливается коннэкт до БД через unixODBC. Он этот конэкт
> > > кладет в пул. Итого Apache отдает какой-то html клиенту. Всё, на этот
> > > раз. (т.к. keepalive. Cамо соединение между браузером/клиентом
> > > осталось?!) Далее. Cпустя чуть-чуть (менее 600 секунд) тот же "браузер
> > > 1" щемиться в script2.php там происходит попытка коннэкта к бд через
> > > unixodbc. Поскольу процесс Apache один и тот же (в случае 1, и
> > > нынешнем) unixODBC подкидывает коннэкт php с pool'a поскольку
> > > реквизиты на коннэкт одни и те же (юзер, пароль, база...) и вот такой
> > > заколдованный круг. Самая главная задача, итого чтобы юзер
> > > законнектившийся к бд один раз через определенный форканный процесс
> > > Apache, далее все последующие запросы там же и выпонялись в этом же
> > > процессе.
> > >
> > > На яву же получается бредовая картина. Apache ведет себя по своему
> > > собственному настроению.
> > > 1. HTTP запрос
> > > Конэкт к базе - полет нормальный. Обрабатываемся в форканом процессе (
> > > к примеру, ?10).
> > >
> > > 2. HTTP запрос
> > > Создаем времянку - полет нормальный. Выполнились в том же 10 процессе.
> > >
> > > 3. HTTP запрос
> > > Какая-нибудь еще операция с БД. Apache форкнул процесс и мы уже
> > > выполняемся в процессе ?11. Нашего старого коннэкта в пуле этого
> > > процесса естественно нет. Это порождает новый коннэкт к бд с теми же
> > > реквизитами...
> > >
> > > Очередность запросов и результатов, совершенно не поддается логике.
> > > Может случиться и на 2 http запросе и на 10...
> > >
> > > Как быть, жить хочется ?! :)
> > >
> > > --
> > > Daniil A Megrabjan | email danil.megrabjan@xxxxxxxxx | icq 4545450
>
>
> --
> WBR dyker
> Agava Software
> GPG Pub key: http://keyserver.veridis.com:11371/export?id=-3088395899858320934&created=1134482111000
> ICQ: 196076228
> Mobile: +7(926)144-93-86
>


--
Daniil A Megrabjan | email danil.megrabjan@xxxxxxxxx | icq 4545450


-- 
Daniil A Megrabjan | email danil.megrabjan@xxxxxxxxx | icq 4545450



 




Copyright © Lexa Software, 1996-2009.