Welcome! Log In Create A New Profile

Advanced

php-fpm стал часто вылетать

Posted by Maxim 
Maxim
php-fpm стал часто вылетать
December 16, 2009 04:12PM
php-fpm стал часто вылетать с ошибкой в логе: php-cgi: event.c:268:
event_base_free: Assertion `(((&base->eventqueue)->tqh_first) ==
((void *)0))' failed.

Что это такое? Как лечить?
Dima Golovchenko
Re: php-fpm стал часто вылетать
December 16, 2009 05:36PM
хорошо бы было указать версию php & fpm

2009/12/16 Maxim <mp3wall@gmail.com>

> php-fpm стал часто вылетать с ошибкой в логе: php-cgi: event.c:268:
> event_base_free: Assertion `(((&base->eventqueue)->tqh_first) ==
> ((void *)0))' failed.
>
> Что это такое? Как лечить?
Andrei Nigmatulin
Re: php-fpm стал часто вылетать
December 16, 2009 07:34PM
On Wednesday 16 December 2009 23:09, Maxim wrote:
> php-fpm стал часто вылетать с ошибкой в логе: php-cgi: event.c:268:
> event_base_free: Assertion `(((&base->eventqueue)->tqh_first) ==
> ((void *)0))' failed.
>
> Что это такое? Как лечить?

Я все ждал, кто же первый спросит.

Это последствия того, что из php-fpm выкинули мою пропатченную libevent и
теперь используется системная.

Лечить - три варианта:

Дописывать php-fpm, чтобы он использовал event_reinit(), будет некоторая
потеря производительности при рождении нового воркера, правда никто не мерял,
насколько серьезная.

Дописывать libevent, чтобы не делать event_reinit(). Фактически, нужен аналог
event_base_free() но без asserts. Я предлагал полтора года назад в libevent
рабочий патч, но дело заглохло.

Возвращать bundled libevent в состав php-fpm как было раньше. Это неплохое
решение для тех, кому нужна стабильность и независимость от сюрпризов типа
этого.



--
Andrei Nigmatulin
GPG PUB KEY 6449830D

Now I lay me down to sleep(3)
Pray the OS my core to keep
If I die before I wake
Pray the Disk my core to take
Alex Samorukov
Re: php-fpm стал часто вылетать
December 16, 2009 09:04PM
Andrei Nigmatulin wrote:
> On Wednesday 16 December 2009 23:09, Maxim wrote:
>
>> php-fpm стал часто вылетать с ошибкой в логе: php-cgi: event.c:268:
>> event_base_free: Assertion `(((&base->eventqueue)->tqh_first) ==
>> ((void *)0))' failed.
>>
>> Что это такое? Как лечить?
>>
>
> Я все ждал, кто же первый спросит.
>
> Это последствия того, что из php-fpm выкинули мою пропатченную libevent и
> теперь используется системная.
>
> Лечить - три варианта:
>
> Дописывать php-fpm, чтобы он использовал event_reinit(), будет некоторая
> потеря производительности при рождении нового воркера, правда никто не мерял,
> насколько серьезная.
>
Мне кажется, что учитывая то, что воркеры стартуют и умирают не так уж и
часто - то это не повлияет на общую скорость. Впрочем, готов потестировать.
Andrei Nigmatulin
Re: php-fpm стал часто вылетать
December 16, 2009 09:04PM
On Thursday 17 December 2009 05:00, Alex Samorukov wrote:
> Andrei Nigmatulin wrote:
> > On Wednesday 16 December 2009 23:09, Maxim wrote:
> >> php-fpm стал часто вылетать с ошибкой в логе: php-cgi: event.c:268:
> >> event_base_free: Assertion `(((&base->eventqueue)->tqh_first) ==
> >> ((void *)0))' failed.
> >>
> >> Что это такое? Как лечить?
> >
> > Я все ждал, кто же первый спросит.
> >
> > Это последствия того, что из php-fpm выкинули мою пропатченную libevent и
> > теперь используется системная.
> >
> > Лечить - три варианта:
> >
> > Дописывать php-fpm, чтобы он использовал event_reinit(), будет некоторая
> > потеря производительности при рождении нового воркера, правда никто не
> > мерял, насколько серьезная.
>
> Мне кажется, что учитывая то, что воркеры стартуют и умирают не так уж и
> часто - то это не повлияет на общую скорость. Впрочем, готов потестировать.

В свете того, что теперь появился dynamic process manager, это может иметь
значение.


--
Andrei Nigmatulin
GPG PUB KEY 6449830D

Now I lay me down to sleep(3)
Pray the OS my core to keep
If I die before I wake
Pray the Disk my core to take
Alex Samorukov
Re: php-fpm стал часто вылетать
December 16, 2009 09:16PM
Andrei Nigmatulin wrote:
>
>
> В свете того, что теперь появился dynamic process manager, это может иметь
> значение.
>
Логично.

Потому и хочу сделать максимально синтетический тест с временем жизни
чайлда, например, в 10 запросов (чтобы форк почаще звали)
Alex Samorukov
Re: php-fpm стал часто вылетать
December 16, 2009 09:16PM
Maxim wrote:
> php-fpm стал часто вылетать с ошибкой в логе: php-cgi: event.c:268:
> event_base_free: Assertion `(((&base->eventqueue)->tqh_first) ==
> ((void *)0))' failed.
>
> Что это такое? Как лечить?
Попробуйте, если не сложно такой патч:

samm@samm-laptop:~/src/fpm/fpm$ svn diff fpm_children.c
Index: fpm_children.c
===================================================================
--- fpm_children.c (revision 292230)
+++ fpm_children.c (working copy)
@@ -349,6 +349,7 @@
pid_t pid;
struct fpm_child_s *child;
int max;
+ struct event_base *base = event_base_new();

if (wp->config->pm->style == PM_STYLE_DYNAMIC) {
if (!in_event_loop) { /* starting */
@@ -391,6 +392,7 @@
break; /* dont try any more on error */

default :
+ event_reinit(base);
child->pid = pid;
fpm_clock_get(&child->started);
fpm_parent_resources_use(child);
Andrei Nigmatulin
Re: php-fpm стал часто вылетать
December 16, 2009 09:42PM
On Thursday 17 December 2009 05:05, Alex Samorukov wrote:
> Maxim wrote:
> > php-fpm стал часто вылетать с ошибкой в логе: php-cgi: event.c:268:
> > event_base_free: Assertion `(((&base->eventqueue)->tqh_first) ==
> > ((void *)0))' failed.
> >
> > Что это такое? Как лечить?
>
> Попробуйте, если не сложно такой патч:

Не надо. event_reinit() нужно вызывать для current_base, для вновь созданной
base это бессмысленно.

Также, после event_reinit() нужно удалить из base все events.

Проблема в том, что это нужно делать _только_ для того чтобы обойти не имеющие
смысла (в случае с fpm) asserts внутри event_base_free() - base полностью
уничтожится в fpm_event_cleanup() через несколько мгновений после
event_reinit(). Если у вас запущено 100 воркеров и на свет появляется 101-й,
то произойдет примерно следующее:

- reinit() уничтожит старую base (и закроет epoll device в случае с linux) в
child process и освободит все связные ресурсы
- reinit() создаст новую base (=новый epoll device) и добавит в него 100*2=200
дескрипторов (stdout и stderr pipes уже запущеных воркеров)
- в коде fpm нужно удалить все только что добавленные events из current_base
- fpm_event_cleanup() вызовет event_base_free(), который уничтожит только что
созданную base

Необходимо понимать, что весь описанный оверхед неизбежен _только_ из-за
присутствия asserts в методе event_base_free().


> samm@samm-laptop:~/src/fpm/fpm$ svn diff fpm_children.c
> Index: fpm_children.c
> ===================================================================
> --- fpm_children.c (revision 292230)
> +++ fpm_children.c (working copy)
> @@ -349,6 +349,7 @@
> pid_t pid;
> struct fpm_child_s *child;
> int max;
> + struct event_base *base = event_base_new();
>
> if (wp->config->pm->style == PM_STYLE_DYNAMIC) {
> if (!in_event_loop) { /* starting */
> @@ -391,6 +392,7 @@
> break; /* dont try any more on error */
>
> default :
> + event_reinit(base);
> child->pid = pid;
> fpm_clock_get(&child->started);
> fpm_parent_resources_use(child);

--
Andrei Nigmatulin
GPG PUB KEY 6449830D

Now I lay me down to sleep(3)
Pray the OS my core to keep
If I die before I wake
Pray the Disk my core to take
Antony Dovgal
Re: php-fpm стал часто вылетать
December 17, 2009 04:46AM
On 17.12.2009 03:34, Andrei Nigmatulin wrote:
> Я все ждал, кто же первый спросит.

Отличный подход к делу.
Найт, ты понимаешь, что так не делается?

> Это последствия того, что из php-fpm выкинули мою пропатченную libevent и
> теперь используется системная.
>
> Лечить - три варианта:
>
> Дописывать php-fpm, чтобы он использовал event_reinit(), будет некоторая
> потеря производительности при рождении нового воркера, правда никто не мерял,
> насколько серьезная.

http://news.php.net/php.cvs/61331
Один вызов функции при каждом форке?
Да сам форк там в сотню раз медленнее.

> Возвращать bundled libevent в состав php-fpm как было раньше. Это неплохое
> решение для тех, кому нужна стабильность и независимость от сюрпризов типа
> этого.

Круто. 5 баллов.

--
Wbr,
Antony Dovgal
---
http://pinba.org - realtime statistics for PHP
Andrey Nigmatulin
Re: php-fpm стал часто вылетать
December 19, 2009 06:20AM
On Thursday 17 December 2009 09:44:54 Antony Dovgal wrote:
> On 17.12.2009 03:34, Andrei Nigmatulin wrote:
> > Я все ждал, кто же первый спросит.
>
> Отличный подход к делу.
> Найт, ты понимаешь, что так не делается?

Да я как бы давно уже ничего не делаю.
Когда dreamcat4 выкинул мою версию libevent у меня закралось опасение, что он
не отследил, что это безопасно было сделать.
Теперь оно подтвердилось.


> > Это последствия того, что из php-fpm выкинули мою пропатченную libevent и
> > теперь используется системная.
> >
> > Лечить - три варианта:
> >
> > Дописывать php-fpm, чтобы он использовал event_reinit(), будет некоторая
> > потеря производительности при рождении нового воркера, правда никто не
> > мерял, насколько серьезная.
>
> http://news.php.net/php.cvs/61331
> Один вызов функции при каждом форке?
> Да сам форк там в сотню раз медленнее.

Это неправильный фикс. event_init() и event_reinit() - две совершенно разные
функции. event_init() устранит симптомы, но появится утечка дескриптора epoll
и утечки памяти.
Причем, насколько я помню, event_reinit() появилась в libevent сравнительно
недавно, и люди со старой версией попрут сюда с вопросами почему не
собирается.

>
> > Возвращать bundled libevent в состав php-fpm как было раньше. Это
> > неплохое решение для тех, кому нужна стабильность и независимость от
> > сюрпризов типа этого.
>
> Круто. 5 баллов.

Жизнь сложна, да.


--
Andrei Nigmatulin
GPG PUB KEY 6449830D

Now I lay me down to sleep(3)
Pray the OS my core to keep
If I die before I wake
Pray the Disk my core to take
fixxxer
Re: php-fpm стал часто вылетать
December 19, 2009 01:26PM
Так, а есть где-нибудь неполоманный вариант 0.6?

Или опять с 0.5 все диффать? :/

On Dec 19, 2:19 pm, Andrey Nigmatulin <andrei.nigmatu...@gmail.com>
wrote:
> On Thursday 17 December 2009 09:44:54 Antony Dovgal wrote:
>
> > On 17.12.2009 03:34, Andrei Nigmatulin wrote:
> > > Я все ждал, кто же первый спросит.
>
> > Отличный подход к делу.
> > Найт, ты понимаешь, что так не делается?
>
> Да я как бы давно уже ничего не делаю.
> Когда dreamcat4 выкинул мою версию libevent у меня закралось опасение, что он
> не отследил, что это безопасно было сделать.
> Теперь оно подтвердилось.
>
> > > Это последствия того, что из php-fpm выкинули мою пропатченную libevent и
> > > теперь используется системная.
>
> > > Лечить - три варианта:
>
> > > Дописывать php-fpm, чтобы он использовал event_reinit(), будет некоторая
> > > потеря производительности при рождении нового воркера, правда никто не
> > > мерял, насколько серьезная.
>
> >http://news.php.net/php.cvs/61331
> > Один вызов функции при каждом форке?
> > Да сам форк там в сотню раз медленнее.
>
> Это неправильный фикс. event_init() и event_reinit() - две совершенно разные
> функции. event_init() устранит симптомы, но появится утечка дескриптора epoll
> и утечки памяти.
> Причем, насколько я помню, event_reinit() появилась в libevent сравнительно
> недавно, и люди со старой версией попрут сюда с вопросами почему не
> собирается.
>
>
>
> > > Возвращать bundled libevent в состав php-fpm как было раньше. Это
> > > неплохое решение для тех, кому нужна стабильность и независимость от
> > > сюрпризов типа этого.
>
> > Круто. 5 баллов.
>
> Жизнь сложна, да.
>
> --
> Andrei Nigmatulin
> GPG PUB KEY 6449830D
>
> Now I lay me down to sleep(3)
> Pray the OS my core to keep
> If I die before I wake
> Pray the Disk my core to take
Ilyas --
Re: php-fpm стал часто вылетать
December 20, 2009 06:00AM
да уж...

именно по этой причине я до сих пор использую везде оригинальную версию
Андрея...

2009/12/19 fixxxer <fixxxerrr@gmail.com>

> Так, а есть где-нибудь неполоманный вариант 0.6?
>
> Или опять с 0.5 все диффать? :/
>
> On Dec 19, 2:19 pm, Andrey Nigmatulin <andrei.nigmatu...@gmail.com>
> wrote:
> > On Thursday 17 December 2009 09:44:54 Antony Dovgal wrote:
> >
> > > On 17.12.2009 03:34, Andrei Nigmatulin wrote:
> > > > Я все ждал, кто же первый спросит.
> >
> > > Отличный подход к делу.
> > > Найт, ты понимаешь, что так не делается?
> >
> > Да я как бы давно уже ничего не делаю.
> > Когда dreamcat4 выкинул мою версию libevent у меня закралось опасение,
> что он
> > не отследил, что это безопасно было сделать.
> > Теперь оно подтвердилось.
> >
> > > > Это последствия того, что из php-fpm выкинули мою пропатченную
> libevent и
> > > > теперь используется системная.
> >
> > > > Лечить - три варианта:
> >
> > > > Дописывать php-fpm, чтобы он использовал event_reinit(), будет
> некоторая
> > > > потеря производительности при рождении нового воркера, правда никто
> не
> > > > мерял, насколько серьезная.
> >
> > >http://news.php.net/php.cvs/61331
> > > Один вызов функции при каждом форке?
> > > Да сам форк там в сотню раз медленнее.
> >
> > Это неправильный фикс. event_init() и event_reinit() - две совершенно
> разные
> > функции. event_init() устранит симптомы, но появится утечка дескриптора
> epoll
> > и утечки памяти.
> > Причем, насколько я помню, event_reinit() появилась в libevent
> сравнительно
> > недавно, и люди со старой версией попрут сюда с вопросами почему не
> > собирается.
> >
> >
> >
> > > > Возвращать bundled libevent в состав php-fpm как было раньше. Это
> > > > неплохое решение для тех, кому нужна стабильность и независимость от
> > > > сюрпризов типа этого.
> >
> > > Круто. 5 баллов.
> >
> > Жизнь сложна, да.
> >
> > --
> > Andrei Nigmatulin
> > GPG PUB KEY 6449830D
> >
> > Now I lay me down to sleep(3)
> > Pray the OS my core to keep
> > If I die before I wake
> > Pray the Disk my core to take
>



--
Ilyas R. Khasyanov
Unix/Linux System Administrator
GPG Key ID: 6EC5EB27 (Changed since 2009-05-12)
Alexey A. Rybak
Re: php-fpm стал часто вылетать
December 20, 2009 06:18AM
2009/12/20 Ilyas -- <umask00@gmail.com>:
> да уж...
>
> именно по этой причине я до сих пор использую везде оригинальную версию
> Андрея...
>

ребят, не надо портить себе карму
libevent'a не должно быть в fpm - и уж тем более если он входит в пхп
патч к libevent'у нужно было разъяснять авторам и доказывать что он
нужен, никто этого не сделал

насколько я понимаю, всё, что нужно щас сделать -
"Дописывать php-fpm, чтобы он использовал event_reinit()"

найт ты можешь просто прислать патч вместо разговоров, а?


> 2009/12/19 fixxxer <fixxxerrr@gmail.com>
>>
>> Так, а есть где-нибудь неполоманный вариант 0.6?
>>
>> Или опять с 0.5 все диффать? :/
>>
>> On Dec 19, 2:19 pm, Andrey Nigmatulin <andrei.nigmatu...@gmail.com>
>> wrote:
>> > On Thursday 17 December 2009 09:44:54 Antony Dovgal wrote:
>> >
>> > > On 17.12.2009 03:34, Andrei Nigmatulin wrote:
>> > > > Я все ждал, кто же первый спросит.
>> >
>> > > Отличный подход к делу.
>> > > Найт, ты понимаешь, что так не делается?
>> >
>> > Да я как бы давно уже ничего не делаю.
>> > Когда dreamcat4 выкинул мою версию libevent у меня закралось опасение,
>> > что он
>> > не отследил, что это безопасно было сделать.
>> > Теперь оно подтвердилось.
>> >
>> > > > Это последствия того, что из php-fpm выкинули мою пропатченную
>> > > > libevent и
>> > > > теперь используется системная.
>> >
>> > > > Лечить - три варианта:
>> >
>> > > > Дописывать php-fpm, чтобы он использовал event_reinit(), будет
>> > > > некоторая
>> > > > потеря производительности при рождении нового воркера, правда никто
>> > > > не
>> > > > мерял, насколько серьезная.
>> >
>> > >http://news.php.net/php.cvs/61331
>> > > Один вызов функции при каждом форке?
>> > > Да сам форк там в сотню раз медленнее.
>> >
>> > Это неправильный фикс. event_init() и event_reinit() - две совершенно
>> > разные
>> > функции. event_init() устранит симптомы, но появится утечка дескриптора
>> > epoll
>> > и утечки памяти.
>> > Причем, насколько я помню, event_reinit() появилась в libevent
>> > сравнительно
>> > недавно, и люди со старой версией попрут сюда с вопросами почему не
>> > собирается.
>> >
>> >
>> >
>> > > > Возвращать bundled libevent в состав php-fpm как было раньше. Это
>> > > > неплохое решение для тех, кому нужна стабильность и независимость от
>> > > > сюрпризов типа этого.
>> >
>> > > Круто. 5 баллов.
>> >
>> > Жизнь сложна, да.
>> >
>> > --
>> > Andrei Nigmatulin
>> > GPG PUB KEY 6449830D
>> >
>> > Now I lay me down to sleep(3)
>> > Pray the OS my core to keep
>> > If I die before I wake
>> > Pray the Disk my core to take
>
>
> --
> Ilyas R. Khasyanov
> Unix/Linux System Administrator
> GPG Key ID: 6EC5EB27 (Changed since 2009-05-12)
>



--

wbr,
fisher
Antony Dovgal
Re: php-fpm стал часто вылетать
December 21, 2009 04:30AM
On 20.12.2009 14:17, Alexey A. Rybak wrote:
> насколько я понимаю, всё, что нужно щас сделать -
> "Дописывать php-fpm, чтобы он использовал event_reinit()"

Там уже всё дописано, я даже ссылку на патч дал.

> найт ты можешь просто прислать патч вместо разговоров, а?

Не может, конечно - "Да я как бы давно уже ничего не делаю." (с)

--
Wbr,
Antony Dovgal
---
http://pinba.org - realtime statistics for PHP
Antony Dovgal
Re: php-fpm стал часто вылетать
December 21, 2009 04:36AM
On 19.12.2009 14:19, Andrey Nigmatulin wrote:
>> Отличный подход к делу.
>> Найт, ты понимаешь, что так не делается?
>
> Да я как бы давно уже ничего не делаю.
> Когда dreamcat4 выкинул мою версию libevent у меня закралось опасение, что он
> не отследил, что это безопасно было сделать.
> Теперь оно подтвердилось.

Т.е. ты знал о проблеме, но решил пока помолчать, чтобы потом с умным видом сказать "я так и думал".
Спасибо большое за помощь.

>> http://news.php.net/php.cvs/61331
>> Один вызов функции при каждом форке?
>> Да сам форк там в сотню раз медленнее.
>
> Это неправильный фикс. event_init() и event_reinit() - две совершенно разные
> функции. event_init() устранит симптомы, но появится утечка дескриптора epoll
> и утечки памяти.

1 раз на 1 форк.
Я не считаю это достаточно важной проблемой, чтобы тратить на неё время.

> Причем, насколько я помню, event_reinit() появилась в libevent сравнительно
> недавно, и люди со старой версией попрут сюда с вопросами почему не
> собирается.

Этого уже достаточно, чтобы сделать так, как я сделал.

>> > Возвращать bundled libevent в состав php-fpm как было раньше. Это
>> > неплохое решение для тех, кому нужна стабильность и независимость от
>> > сюрпризов типа этого.
>>
>> Круто. 5 баллов.
>
> Жизнь сложна, да.

Вместо того, чтобы просто прислать патч (да-да, времени у тебя на патч нет,
а потрепаться про него - есть), ты настраиваешь всех против проекта.

--
Wbr,
Antony Dovgal
---
http://pinba.org - realtime statistics for PHP
Dmitriy MiksIr
Re: php-fpm стал часто вылетать
December 21, 2009 10:18AM
21 декабря 2009 г. 12:35 пользователь Antony Dovgal
<tony@daylessday.org>написал:

>
> Вместо того, чтобы просто прислать патч (да-да, времени у тебя на патч нет,
> а потрепаться про него - есть), ты настраиваешь всех против проекта.
>
>
Мне кажется, у Вас какая-то предвзятось. Никакого "настраивания" лично я не
заметил, кроме чуточку ехидного замечания о том, что когда человек берется
что-то переделывать - стоит понять, почему было сделано так, а не иначе - и
это на совести того, кто переделывает, а не того, кто изначально написал
код.

Вот раз теперь fpm в оф. репозитории - может "весомые" люди займутся
"продавливанием" патча в libevent? Раз уж у Андрея это не получилось.
Antony Dovgal
Re: php-fpm стал часто вылетать
December 21, 2009 10:32AM
On 21.12.2009 18:16, Dmitriy MiksIr wrote:
> Мне кажется, у Вас какая-то предвзятось.

У меня, конечно, предвзятость, но люди уже пугаются - http://groups.google.com/group/highload-php-ru/msg/ae5b0241608cd683

> Никакого "настраивания" лично я
> не заметил, кроме чуточку ехидного замечания о том, что когда человек
> берется что-то переделывать - стоит понять, почему было сделано так, а
> не иначе - и это на совести того, кто переделывает, а не того, кто
> изначально написал код.

<тут был аналогично ехидный ответ, но я его удалил>
Знаете, эта ехидность - она демотивирует и очень сильно.

> Вот раз теперь fpm в оф. репозитории - может "весомые" люди займутся
> "продавливанием" патча в libevent? Раз уж у Андрея это не получилось.

Не надо ничего продавливать.
Уже есть решение мега-"проблемы" с реинициализацией event_base 1 раз на форк и без патчей для libevent.
Собственно, надо делать эту реинициализацию. И всё.
Никаких непринятых патчей; нестандартных bundled libraries; ничего такого не надо.

Вопрос к автору треда - вы версию из SVN пробовали?
Судя по имени бинарника "php-cgi" - нет. Попробуйте.

--
Wbr,
Antony Dovgal
---
http://pinba.org - realtime statistics for PHP
fixxxer
Re: php-fpm стал часто вылетать
December 21, 2009 02:08PM
On Dec 21, 6:30 pm, Antony Dovgal <t...@daylessday.org> wrote:
> Уже есть решение мега-"проблемы" с реинициализацией event_base 1 раз на форк и без патчей для libevent.
> Собственно, надо делать эту реинициализацию. И всё.
> Никаких непринятых патчей; нестандартных bundled libraries; ничего такого не надо.
>
> Вопрос к автору треда - вы версию из SVN пробовали?
> Судя по имени бинарника "php-cgi" - нет. Попробуйте.


Кстати, хрен знает что там с еполлом, но на freebsd утечки kqueue
дескрипторов на текущем svn я не замечаю.
Andrey Nigmatulin
Re: php-fpm стал часто вылетать
December 21, 2009 10:54PM
On Monday 21 December 2009 09:35:17 Antony Dovgal wrote:
> On 19.12.2009 14:19, Andrey Nigmatulin wrote:
> >> Отличный подход к делу.
> >> Найт, ты понимаешь, что так не делается?
> >
> > Да я как бы давно уже ничего не делаю.
> > Когда dreamcat4 выкинул мою версию libevent у меня закралось опасение,
> > что он не отследил, что это безопасно было сделать.
> > Теперь оно подтвердилось.
>
> Т.е. ты знал о проблеме, но решил пока помолчать, чтобы потом с умным видом
> сказать "я так и думал". Спасибо большое за помощь.

Ну допустим, лично тебе я о ней говорил еще когда мы общались через скайп
втроем со Стоговым.


> >> http://news.php.net/php.cvs/61331
> >> Один вызов функции при каждом форке?
> >> Да сам форк там в сотню раз медленнее.
> >
> > Это неправильный фикс. event_init() и event_reinit() - две совершенно
> > разные функции. event_init() устранит симптомы, но появится утечка
> > дескриптора epoll и утечки памяти.
>
> 1 раз на 1 форк.
> Я не считаю это достаточно важной проблемой, чтобы тратить на неё время.

С таким подходом достаточно было просто убрать event_base_free().
Warnings пропадут, проблемы тоже. Останутся просто незначительные утечки
памяти и epoll дескриптора.

В этом случае ни твой добавленный event_init() ни event_reinit() не нужны.

> > Причем, насколько я помню, event_reinit() появилась в libevent
> > сравнительно недавно, и люди со старой версией попрут сюда с вопросами
> > почему не собирается.
>
> Этого уже достаточно, чтобы сделать так, как я сделал.
>
> >> > Возвращать bundled libevent в состав php-fpm как было раньше. Это
> >> > неплохое решение для тех, кому нужна стабильность и независимость от
> >> > сюрпризов типа этого.
> >>
> >> Круто. 5 баллов.
> >
> > Жизнь сложна, да.
>
> Вместо того, чтобы просто прислать патч (да-да, времени у тебя на патч нет,
> а потрепаться про него - есть), ты настраиваешь всех против проекта.

Хватит троллить уже, да.

Когда появился первый репорт проблемы я о ней рассказал развернуто, с
подробным объяснением почему она есть и рассказал три способа как ее починить.

Заметь, не я ее создал.

Затем мне не понравился твой фикс и я беспристрастно объяснил почему.


--
Andrei Nigmatulin
GPG PUB KEY 6449830D

Now I lay me down to sleep(3)
Pray the OS my core to keep
If I die before I wake
Pray the Disk my core to take
Andrey Nigmatulin
Re: php-fpm стал часто вылетать
December 21, 2009 11:28PM
On Monday 21 December 2009 19:07:43 fixxxer wrote:
> On Dec 21, 6:30 pm, Antony Dovgal <t...@daylessday.org> wrote:
> > Уже есть решение мега-"проблемы" с реинициализацией event_base 1 раз на
> > форк и без патчей для libevent. Собственно, надо делать эту
> > реинициализацию. И всё.
> > Никаких непринятых патчей; нестандартных bundled libraries; ничего такого
> > не надо.
> >
> > Вопрос к автору треда - вы версию из SVN пробовали?
> > Судя по имени бинарника "php-cgi" - нет. Попробуйте.
>
> Кстати, хрен знает что там с еполлом, но на freebsd утечки kqueue
> дескрипторов на текущем svn я не замечаю.

Не удивительно: kqueue дескриптор не наследуется в child после fork(), в
отличии от epoll.


--
Andrei Nigmatulin
GPG PUB KEY 6449830D

Now I lay me down to sleep(3)
Pray the OS my core to keep
If I die before I wake
Pray the Disk my core to take
Alexey A. Rybak
Re: php-fpm стал часто вылетать
December 22, 2009 03:32AM
>> >> > Возвращать bundled libevent в состав php-fpm как было раньше. Это
>> >> > неплохое решение для тех, кому нужна стабильность и независимость от
>> >> > сюрпризов типа этого.
>> >>
>> >> Круто. 5 баллов.
>> >
>> > Жизнь сложна, да.
>>
>> Вместо того, чтобы просто прислать патч (да-да, времени у тебя на патч нет,
>> а потрепаться про него - есть), ты настраиваешь всех против проекта.
>
> Хватит троллить уже, да.
>
> Когда появился первый репорт проблемы я о ней рассказал развернуто, с
> подробным объяснением почему она есть и рассказал три способа как ее починить.
>
> Заметь, не я ее создал.
>
> Затем мне не понравился твой фикс и я беспристрастно объяснил почему.

андрюх, твоё беспристрасное письмо начиналось со словами "а я всё ждал..." ;)


--

wbr,
fisher
Andrey Nigmatulin
Re: php-fpm стал часто вылетать
December 22, 2009 04:24AM
On Tuesday 22 December 2009 08:31:02 Alexey A. Rybak wrote:
> >> >> > Возвращать bundled libevent в состав php-fpm как было раньше. Это
> >> >> > неплохое решение для тех, кому нужна стабильность и независимость
> >> >> > от сюрпризов типа этого.
> >> >>
> >> >> Круто. 5 баллов.
> >> >
> >> > Жизнь сложна, да.
> >>
> >> Вместо того, чтобы просто прислать патч (да-да, времени у тебя на патч
> >> нет, а потрепаться про него - есть), ты настраиваешь всех против
> >> проекта.
> >
> > Хватит троллить уже, да.
> >
> > Когда появился первый репорт проблемы я о ней рассказал развернуто, с
> > подробным объяснением почему она есть и рассказал три способа как ее
> > починить.
> >
> > Заметь, не я ее создал.
> >
> > Затем мне не понравился твой фикс и я беспристрастно объяснил почему.
>
> андрюх, твоё беспристрасное письмо начиналось со словами "а я всё ждал..."
> ;)

Я уже пояснил, чего именно я ждал:

> Когда dreamcat4 выкинул мою версию libevent у меня закралось опасение, что
> он не отследил, что это безопасно было сделать.
> Теперь оно подтвердилось.

Взялись поддерживать - старайтесь не ломать.

Сломали - не надо жаловаться и обвинять меня.

Я помогаю по мере возможностей.


--
Andrei Nigmatulin
GPG PUB KEY 6449830D

Now I lay me down to sleep(3)
Pray the OS my core to keep
If I die before I wake
Pray the Disk my core to take
fixxxer
Re: php-fpm стал часто вылетать
December 22, 2009 04:42AM
On Dec 22, 7:27 am, Andrey Nigmatulin <andrei.nigmatu...@gmail.com>
wrote:
> On Monday 21 December 2009 19:07:43 fixxxer wrote:
> > > Уже есть решение мега-"проблемы" с реинициализацией event_base 1 раз на
> > > форк и без патчей для libevent. Собственно, надо делать эту
> > > реинициализацию. И всё.
> > > Никаких непринятых патчей; нестандартных bundled libraries; ничего такого
> > > не надо.
>
> > > Вопрос к автору треда - вы версию из SVN пробовали?
> > > Судя по имени бинарника "php-cgi" - нет. Попробуйте.
>
> > Кстати, хрен знает что там с еполлом, но на freebsd утечки kqueue
> > дескрипторов на текущем svn я не замечаю.
>
> Не удивительно: kqueue дескриптор не наследуется в child после fork(), в
> отличии от epoll.


Ага. Все, дошло до меня :).

Что-то мне не нравится ни один из вариантов без вмешательств в
либевент. :/ А у libev такой проблемы нет? Там вроде была libevent
compat-прослойка ;)
Andrey Nigmatulin
Re: php-fpm стал часто вылетать
December 22, 2009 04:50AM
On Tuesday 22 December 2009 09:40:18 fixxxer wrote:
> On Dec 22, 7:27 am, Andrey Nigmatulin <andrei.nigmatu...@gmail.com>
>
> wrote:
> > On Monday 21 December 2009 19:07:43 fixxxer wrote:
> > > > Уже есть решение мега-"проблемы" с реинициализацией event_base 1 раз
> > > > на форк и без патчей для libevent. Собственно, надо делать эту
> > > > реинициализацию. И всё.
> > > > Никаких непринятых патчей; нестандартных bundled libraries; ничего
> > > > такого не надо.
> > > >
> > > > Вопрос к автору треда - вы версию из SVN пробовали?
> > > > Судя по имени бинарника "php-cgi" - нет. Попробуйте.
> > >
> > > Кстати, хрен знает что там с еполлом, но на freebsd утечки kqueue
> > > дескрипторов на текущем svn я не замечаю.
> >
> > Не удивительно: kqueue дескриптор не наследуется в child после fork(), в
> > отличии от epoll.
>
> Ага. Все, дошло до меня :).
>
> Что-то мне не нравится ни один из вариантов без вмешательств в
> либевент. :/ А у libev такой проблемы нет? Там вроде была libevent
> compat-прослойка ;)

У libev гораздо более другие проблемы.

В частности, если хочется два независимых event связать с одним контекстом,
есть решения только через жёпу.

Например, это необходимо в коде fpm для stdout и stderr events.


--
Andrei Nigmatulin
GPG PUB KEY 6449830D

Now I lay me down to sleep(3)
Pray the OS my core to keep
If I die before I wake
Pray the Disk my core to take
Алексей Бобок
Re: php-fpm стал часто вылетать
December 22, 2009 05:20AM
Господа, ну мы же все профессионалы :)
Просто достаньте и померяйте :)
Не засерайте, пожайлуста, рассылку выяснением кто что сказал, да? :)

> Это неплохое решение для тех, кому нужна стабильность и независимость от сюрпризов типа этого.
> Круто. 5 баллов.
> Жизнь сложна, да.
> Вместо того, чтобы просто прислать патч (да-да, времени у тебя на патч
> нет, а потрепаться про него - есть), ты настраиваешь всех против
> проекта.
> Хватит троллить уже, да.
> Когда появился первый репорт проблемы я о ней рассказал развернуто, с
> подробным объяснением почему она есть и рассказал три способа как ее
> починить.
> Заметь, не я ее создал.
> Затем мне не понравился твой фикс и я беспристрастно объяснил почему.
>андрюх, твоё беспристрасное письмо начиналось со словами "а я всё ждал..."
> ;)
>
> Я уже пояснил, чего именно я ждал:
> Взялись поддерживать - старайтесь не ломать.
> Сломали - не надо жаловаться и обвинять меня.
> Я помогаю по мере возможностей.



--
Best regards, Alexey Bobok
Antony Dovgal
Re: php-fpm стал часто вылетать
December 22, 2009 05:46AM
On 22.12.2009 06:53, Andrey Nigmatulin wrote:
>> 1 раз на 1 форк.
>> Я не считаю это достаточно важной проблемой, чтобы тратить на неё время.
>
> С таким подходом достаточно было просто убрать event_base_free().
> Warnings пропадут, проблемы тоже. Останутся просто незначительные утечки
> памяти и epoll дескриптора.

И при этом чайлд будем принимать ивенты парента, т.к. при epoll он всё унаследовал.
Уже прошли это.

>> > Причем, насколько я помню, event_reinit() появилась в libevent
>> > сравнительно недавно, и люди со старой версией попрут сюда с вопросами
>> > почему не собирается.

Кстати об этом:
> Changes in 1.4.1-beta:
> * provide event_reinit() to reintialize an event_base after fork

Минимальная требуемая версия на данный момент - 1.4.11.

> Хватит троллить уже, да.

Смешно =)

> Когда появился первый репорт проблемы я о ней рассказал развернуто, с
> подробным объяснением почему она есть и рассказал три способа как ее починить.

В следующий раз формулируй подробные объяснения как-то по-другому и не начинай их "Я всё ждал, кто первый спросит".
К сожалению, в этот раз твои объяснения выглядели как чистой воды саботаж.

Если у тебя есть какие-то сомнения или подозрения по поводу изменений dreamcat4 или моих -
выскажи их ДО того, как их отрепортят, не надо ждать, а потом с умным видом говорить "я так и знал".

Найт, понимаешь, я на данный момент не даю умереть проекту, который ты начал,
не из-за каких-то виртуальных или реальных плюшек, а просто так, ради доп. фана и потому, что больше некому.
И если ты будешь приходить и говорить "я знал об этом, но ждал пока спросят", "хотите стабильности -
используйте старые патчи", "хаха! опять всё сломали!", то этот фан очень быстро уйдёт в минус.

> Заметь, не я ее создал.

Ну, если подумать, то и так тоже можно сказать.
Если бы ты изначально использовал локальный event_base и делал ему явно reinit, то проблемы и не было.
Нет, ну конечно, реинит пришлось бы делать 1 раз на форк. Я знаю, тебе это очень не нравится.

--
Wbr,
Antony Dovgal
---
http://pinba.org - realtime statistics for PHP
Andrey Nigmatulin
Re: php-fpm стал часто вылетать
December 22, 2009 11:38AM
On Tuesday 22 December 2009 10:44:19 Antony Dovgal wrote:
> On 22.12.2009 06:53, Andrey Nigmatulin wrote:
> >> 1 раз на 1 форк.
> >> Я не считаю это достаточно важной проблемой, чтобы тратить на неё время.
> >
> > С таким подходом достаточно было просто убрать event_base_free().
> > Warnings пропадут, проблемы тоже. Останутся просто незначительные утечки
> > памяти и epoll дескриптора.
>
> И при этом чайлд будем принимать ивенты парента, т.к. при epoll он всё
> унаследовал. Уже прошли это.

Не будет. Для этого child должен свалиться в epoll_wait().

> >> > Причем, насколько я помню, event_reinit() появилась в libevent
> >> > сравнительно недавно, и люди со старой версией попрут сюда с вопросами
> >> > почему не собирается.
>
> Кстати об этом:
> > Changes in 1.4.1-beta:
> > * provide event_reinit() to reintialize an event_base after fork
>
> Минимальная требуемая версия на данный момент - 1.4.11.

dreamcat добавил проверку версии ? Это хорошо, значит с этим проблемы нет.

> > Хватит троллить уже, да.
>
> Смешно =)
>
> > Когда появился первый репорт проблемы я о ней рассказал развернуто, с
> > подробным объяснением почему она есть и рассказал три способа как ее
> > починить.
>
> В следующий раз формулируй подробные объяснения как-то по-другому и не
> начинай их "Я всё ждал, кто первый спросит". К сожалению, в этот раз твои
> объяснения выглядели как чистой воды саботаж.

Я тебе и Стогову по скайпу объяснял почему libevent пока нельзя использовать
внешний. Про сабж тоже говорил. Какой нахрен саботаж ?

> Если у тебя есть какие-то сомнения или подозрения по поводу изменений
> dreamcat4 или моих - выскажи их ДО того, как их отрепортят, не надо ждать,
> а потом с умным видом говорить "я так и знал".

Сорри, хотел помочь. Был не прав. Больше не буду.

> Найт, понимаешь, я на данный момент не даю умереть проекту, который ты
> начал, не из-за каких-то виртуальных или реальных плюшек, а просто так,
> ради доп. фана и потому, что больше некому. И если ты будешь приходить и
> говорить "я знал об этом, но ждал пока спросят", "хотите стабильности -
> используйте старые патчи", "хаха! опять всё сломали!", то этот фан очень
> быстро уйдёт в минус.

Я тебя об этом не просил. Если тебе не в кайф - не занимайся. У тебя до сих
пор какие-то иллюзии по поводу опен сорс остались ?

> > Заметь, не я ее создал.
>
> Ну, если подумать, то и так тоже можно сказать.
> Если бы ты изначально использовал локальный event_base и делал ему явно
> reinit, то проблемы и не было. Нет, ну конечно, реинит пришлось бы делать
> 1 раз на форк. Я знаю, тебе это очень не нравится.

Мне не нравится подстраиваться под заморочки libevent. Чтобы fpm заработал,
мне пришлось им протолкнуть несколько изменений. На вариат base_free() без
asserts в итоге они тоже согласились, но с условием что я напишу им test case
с таймингами. Написать test case не дошли руки, как обычно. Сейчас, конечно,
жалею. Было бы сильно меньше вони.


--
Andrei Nigmatulin
GPG PUB KEY 6449830D

Now I lay me down to sleep(3)
Pray the OS my core to keep
If I die before I wake
Pray the Disk my core to take
Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 171
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready