Странное поведение php fpm на freebsd 6.2

64 views
Skip to first unread message

user0ff

unread,
Feb 2, 2008, 8:24:58 PM2/2/08
to highload-php-ru
Добрый день.
Спасибо за ваш труд!
Но как-то странно ведет себя php при большой нагрузке, например чуть-
чуть база под себя откушала процессорное время и php-cgi напрочь
слетает. В логах дикая паника и попытка перегрузить детей каждые
0.5-1.5 секунд. Потом пропадает pid и есессно в ps ax ничего невидно.

Andrei Nigmatulin

unread,
Feb 2, 2008, 8:35:18 PM2/2/08
to highloa...@googlegroups.com

Эти исправления должны помочь.

--
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

patch-0.5.6-1.txt
patch-0.5.6-2.txt

user0ff

unread,
Feb 4, 2008, 5:05:42 AM2/4/08
to highload-php-ru
Спасибо огромное! Уже 12 часов полет нормальный :)


> Эти исправления должны помочь.
>
> --
> 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
>
>  patch-0.5.6-1.txt
> 1KЗагрузить
>
>  patch-0.5.6-2.txt
> 2KЗагрузить

evt...@gmail.com

unread,
Feb 10, 2008, 3:22:45 PM2/10/08
to highload-php-ru
>
> Эти исправления должны помочь.
>

планируется ли обновление файлов для скачки http://php-fpm.anight.org/download.html
с учетом этих изменений? ;)

Andrei Nigmatulin

unread,
Feb 10, 2008, 5:16:39 PM2/10/08
to highloa...@googlegroups.com

Да, конечно. Я хочу приурочить bugfix релиз к выходу 5.2.6, который, по идее
уже скоро.

kay

unread,
Feb 10, 2008, 6:12:20 PM2/10/08
to highload-php-ru
пересобрал с наложенными патчами, слежу за сообщениями cron

Rauan Maemirov

unread,
Feb 20, 2008, 8:53:57 AM2/20/08
to highload-php-ru
А можно написать команду, которая устанавливает patch?

Alexey V. Karagodov

unread,
Feb 20, 2008, 9:17:34 AM2/20/08
to highloa...@googlegroups.com
patch

P.S.: man patch

silly_sad

unread,
Feb 20, 2008, 9:29:53 AM2/20/08
to highloa...@googlegroups.com
Alexey V. Karagodov wrote:

>> А можно написать команду, которая устанавливает patch?

> patch

я думаю человек просил подсказать какие ключи...

-d каталог от которого отсчитывать путь который указан в файле патча
(там в начале сказано к какому файлу патч должен прикладываться, команда
патч будет искать этот файл)
-pN где N - количество компонент пути который указан в файле патча
которые надо похерить

файл патча пустить на стандартный ввод этой команде

kay

unread,
Feb 22, 2008, 5:08:57 PM2/22/08
to highload-php-ru
> файл патча пустить на стандартный ввод этой команде

а что сложного?
cat patch-0.5.6-1.txt | patch -d php-5.2.5 -p1

anlide

unread,
Apr 22, 2008, 5:06:58 PM4/22/08
to highload-php-ru
Вообще непонятно как этим патчем пользоваться. Как патчем
воспользоваться?
Всё ставилось из портов.
Пересобрать php или php-fpm? Судя по названию - пересобрать надо php,
а по содержимому наверное php-fpm.
Что значит "пропатчить" и "пересобрать" это залить патч в папку порта
и... что дальше сделать?

"man patch"
Тут нет ответов на мои вопросы.

anlide

unread,
Apr 22, 2008, 5:57:03 PM4/22/08
to highload-php-ru
// PHP-FPM должен быть установлен, это к другой теме
# cd /usr/ports/lang/php5-fpm/work
// Оба патча надо залить в соотв. папку, юзал mc. Команды не наберу.
# cat patch-0.5.6-1.txt | patch -d php-5.2.5 -p1
# cat patch-0.5.6-2.txt | patch -d php-5.2.5 -p1
# cd ./..
# make deinstall clean
# make install clean

Проблема как была так и осталась... что делать?

В лог файле какой-то беспредел творится (постоянно перезапускаются
чилды, периодически перезапускается мастер):

Apr 23 01:45:17.683935 [NOTICE] fpm_event_init_main(), line 98:
libevent: using kqueue
Apr 23 01:45:17.684372 [NOTICE] fpm_init(), line 49: fpm is running,
pid 10652
Apr 23 01:45:17.686380 [NOTICE] fpm_children_make(), line 305: child
10653 (pool default) started
Apr 23 01:45:17.687213 [NOTICE] fpm_children_make(), line 305: child
10654 (pool default) started
Apr 23 01:45:17.688782 [NOTICE] fpm_children_make(), line 305: child
10655 (pool default) started
Apr 23 01:45:17.689808 [NOTICE] fpm_children_make(), line 305: child
10656 (pool default) started
Apr 23 01:45:17.690591 [NOTICE] fpm_children_make(), line 305: child
10657 (pool default) started
Apr 23 01:45:17.692643 [NOTICE] fpm_children_make(), line 305: child
10658 (pool default) started
Apr 23 01:45:17.694019 [NOTICE] fpm_children_make(), line 305: child
10659 (pool default) started
Apr 23 01:45:17.694305 [NOTICE] fpm_event_loop(), line 113: libevent:
entering main loop
Apr 23 01:46:07.031413 [NOTICE] fpm_got_signal(), line 70: received
SIGCHLD
Apr 23 01:46:07.031527 [WARNING] fpm_children_bury(), line 229: child
10658 (pool default) exited on signal 11 SIGSEGV after 49.338633
seconds
Apr 23 01:46:07.032879 [NOTICE] fpm_children_make(), line 305: child
11295 (pool default) started
Apr 23 01:46:14.453839 [NOTICE] fpm_got_signal(), line 70: received
SIGCHLD
Apr 23 01:46:14.453944 [WARNING] fpm_children_bury(), line 229: child
10655 (pool default) exited on signal 11 SIGSEGV after 56.764864
seconds
Apr 23 01:46:14.454929 [NOTICE] fpm_children_make(), line 305: child
11400 (pool default) started



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

Andrei Nigmatulin

unread,
Apr 23, 2008, 11:49:20 AM4/23/08
to highloa...@googlegroups.com
On Wednesday 23 April 2008 01:57, anlide wrote:

Все правильно делаете, а вот этот - http://news.php.net/php.cvs/47376
установлен ?

Если да, то нужен backtrace падения.

--

anlide

unread,
Apr 30, 2008, 4:30:44 PM4/30/08
to highload-php-ru
Нет, этот патч не установлен. Жду не дождусь переезда на Debian Linux
(5-9 мая). Этот FreeBSD уже очень надоел. На самом деле получается,
что "падает" phpfpm только если случилась пиковая нагрузка по
пользователям и по работе внутренних скриптов сервера (которые в
рамках моего проекта очень тяжёлые по ресурсам). Падение выражается в
том, что phpfpm продолжает работать (судя по запущенным процессам и
логфайлом), но nginx его уже не видит.

Как решение - вижу вариант каждый час перезагружать nginx+phpfpm
(рестарт phpfpm далее рестарт nginx). Что скажите?

On 23 апр, 18:49, Andrei Nigmatulin <andrei.nigmatu...@gmail.com>
wrote:
> On Wednesday 23 April 2008 01:57, anlide wrote:
>
> Все правильно делаете, а вот этот -http://news.php.net/php.cvs/47376

Алексей Бещеков

unread,
Apr 30, 2008, 5:11:42 PM4/30/08
to highloa...@googlegroups.com
On 01.05.2008, at 0:30, anlide wrote:

> Нет, этот патч не установлен.

Может всё таки стоит установить патч ?
Его же не просто так посоветовали ?

> Жду не дождусь переезда на Debian Linux
> (5-9 мая). Этот FreeBSD уже очень надоел.

Не факт что это поможет, с таким подходом :)
Дело не ОС.
В дебиане так же придётся руками их накладывать :)

> На самом деле получается,
> что "падает" phpfpm только если случилась пиковая нагрузка по
> пользователям и по работе внутренних скриптов сервера (которые в
> рамках моего проекта очень тяжёлые по ресурсам). Падение выражается в
> том, что phpfpm продолжает работать (судя по запущенным процессам и
> логфайлом), но nginx его уже не видит.
>
> Как решение - вижу вариант каждый час перезагружать nginx+phpfpm
> (рестарт phpfpm далее рестарт nginx). Что скажите?

Идиотизм. Как и любая попытка лечить следствие а не причину.
nginx - точно перегружать не нужно.

и для начала - прислать логи php-fpm и nginx в эти моменты.
так как в имеющихся видно только то что пхп падает,
причём достаточно вероятно по уже указанной причине

Алексей Бещёков

anlide

unread,
May 1, 2008, 12:06:56 PM5/1/08
to highload-php-ru
Та ситуация такая, что год работал под Debian Linux и всё было
замечательно. А вот теперь месяц мучаюсь под FreeBSD, и скоро перееду
на сервер с ОСью Debian Linux. Ну вот скажите - зачем мне разбираться
как ставить патчи типа http://news.php.net/php.cvs/47376 ? Я за свою
жизнь написал немало очень сложных программ, но контент этой страницы
вводит меня в ступор. Теперь понятно почему у меня такой подход?


Не напрасно посоветовали поставить патч. В этом ни секунды не
сомневаюсь. Но если я не понимаю как его поставить - то может имеет
смысл поставить последнюю стабильную версию PHP -> (5.2.4)?

ЗЫ. По поводу логов - как только поймаю ситуацию: опубликую тут логи и
конфиги.
ЗЫЫ. Алексей Бещёков, а что это за файлик прикреплён к вашему
сообщению?
> smime.p7s
> 4KЗагрузить

Antony Dovgal

unread,
May 2, 2008, 8:52:37 AM5/2/08
to highloa...@googlegroups.com
On 01.05.2008 20:06, anlide wrote:
> Та ситуация такая, что год работал под Debian Linux и всё было
> замечательно. А вот теперь месяц мучаюсь под FreeBSD, и скоро перееду
> на сервер с ОСью Debian Linux. Ну вот скажите - зачем мне разбираться
> как ставить патчи типа http://news.php.net/php.cvs/47376 ? Я за свою
> жизнь написал немало очень сложных программ, но контент этой страницы
> вводит меня в ступор. Теперь понятно почему у меня такой подход?

Да, теперь понятно.

Напонятно только как можно было написать кучу сложных программ, но при этому не
узнать что такое "diff" и не знать как пользоваться программой "patch".



> Не напрасно посоветовали поставить патч. В этом ни секунды не
> сомневаюсь. Но если я не понимаю как его поставить - то может имеет
> смысл поставить последнюю стабильную версию PHP -> (5.2.4)?

Вас обманули, последняя стабильная - это 5.2.6.

--
Wbr,
Antony Dovgal

Rauan Maemirov

unread,
May 2, 2008, 5:01:16 PM5/2/08
to highload-php-ru
Кстати, честно говоря, меня тоже в ступор привела эта страница.
Можете подсказать, как ее скачать, а затем поставить.
Когда я беру wget-ом, он в поток станицу выводит. Пытался выбрать в
селектах, потом patch не поставился. Видать, не в том формате скачал.

On May 2, 6:52 pm, Antony Dovgal <t...@daylessday.org> wrote:
> On 01.05.2008 20:06, anlide wrote:
>
> > Та ситуация такая, что год работал под Debian Linux и всё было
> > замечательно. А вот теперь месяц мучаюсь под FreeBSD, и скоро перееду
> > на сервер с ОСью Debian Linux. Ну вот скажите - зачем мне разбираться
> > как ставить патчи типаhttp://news.php.net/php.cvs/47376? Я за свою

Andrei Nigmatulin

unread,
May 2, 2008, 5:10:32 PM5/2/08
to highloa...@googlegroups.com
On Saturday 03 May 2008 01:01, Rauan Maemirov wrote:
> Кстати, честно говоря, меня тоже в ступор привела эта страница.
> Можете подсказать, как ее скачать, а затем поставить.
> Когда я беру wget-ом, он в поток станицу выводит. Пытался выбрать в
> селектах, потом patch не поставился. Видать, не в том формате скачал.

Два клика - и у вас ссылка на чистый патч:

http://cvs.php.net/viewvc.cgi/php-src/main/SAPI.c?r1=1.202.2.7.2.15&r2=1.202.2.7.2.16&view=patch

Antony Dovgal

unread,
May 2, 2008, 5:19:44 PM5/2/08
to highloa...@googlegroups.com
On 03.05.2008 01:01, Rauan Maemirov wrote:
> Кстати, честно говоря, меня тоже в ступор привела эта страница.
> Можете подсказать, как ее скачать, а затем поставить.
> Когда я беру wget-ом, он в поток станицу выводит. Пытался выбрать в
> селектах, потом patch не поставился. Видать, не в том формате скачал.

Эта страница - просто интерфейс к архиву мэйл-листа, в данный мэйл-лист шлются все логи CVS.
В этом письме есть две ссылки, первая ведет на страницу диффа файла NEWS, вторая ведет на страницу самого патча:
http://cvs.php.net/viewvc.cgi/php-src/main/SAPI.c?r1=1.202.2.7.2.15&r2=1.202.2.7.2.16&diff_format=u
По ссылке "Patch" можно скачать патч.

Но всё еще проще: патч добавляет всего 2 строки в файл main/SAPI.c (они помечены плюсами).
------
@@ -301,6 +301,7 @@

/* SG(sapi_headers).http_response_code = 200; */
SG(sapi_headers).http_status_line = NULL;
+ SG(sapi_headers).mimetype = NULL;
SG(read_post_bytes) = 0;
SG(request_info).post_data = NULL;
SG(request_info).raw_post_data = NULL;
@@ -340,6 +341,7 @@
SG(sapi_headers).http_response_code = 200;
*/
SG(sapi_headers).http_status_line = NULL;
+ SG(sapi_headers).mimetype = NULL;
------
Цифры в строке с "@@" - это номера строк.

--
Wbr,
Antony Dovgal

Rauan Maemirov

unread,
May 2, 2008, 5:22:27 PM5/2/08
to highload-php-ru
Все, теперь нашел. спасибо.

On May 3, 3:10 am, Andrei Nigmatulin <andrei.nigmatu...@gmail.com>
wrote:
> On Saturday 03 May 2008 01:01, Rauan Maemirov wrote:
>
> > Кстати, честно говоря, меня тоже в ступор привела эта страница.
> > Можете подсказать, как ее скачать, а затем поставить.
> > Когда я беру wget-ом, он в поток станицу выводит. Пытался выбрать в
> > селектах, потом patch не поставился. Видать, не в том формате скачал.
>
> Два клика - и у вас ссылка на чистый патч:
>
> http://cvs.php.net/viewvc.cgi/php-src/main/SAPI.c?r1=1.202.2.7.2.15&r...

Rauan Maemirov

unread,
May 2, 2008, 6:37:52 PM5/2/08
to highload-php-ru
И еще вопрос в тему.

http://news.php.net/php.cvs/49361 и
http://news.php.net/php.cvs/47376

вошли в версию php 5.2.6?

Andrei Nigmatulin

unread,
May 2, 2008, 6:49:33 PM5/2/08
to highloa...@googlegroups.com
On Saturday 03 May 2008 02:37, Rauan Maemirov wrote:
> И еще вопрос в тему.
>
> http://news.php.net/php.cvs/49361 и
> http://news.php.net/php.cvs/47376
>
> вошли в версию php 5.2.6?

Да. А также еще 120+ багфиксов: http://www.php.net/releases/5_2_6.php

Antony Dovgal

unread,
May 2, 2008, 6:53:19 PM5/2/08
to highloa...@googlegroups.com
On 03.05.2008 02:37, Rauan Maemirov wrote:
> И еще вопрос в тему.
>
> http://news.php.net/php.cvs/49361 и
> http://news.php.net/php.cvs/47376
>
> вошли в версию php 5.2.6?

Конечно. Оба.

--
Wbr,
Antony Dovgal

anlide

unread,
May 3, 2008, 6:53:27 PM5/3/08
to highload-php-ru
Третьи сутки полёт нормальный. 220000 обращений к серверу в день.
Рассказываю что сделал. Есть в конфиге php-fpm интересная настройка:
"max_requests". Она устанавливается в ноль и php-fpm больше не падает.

Вырезки из лог файла php-fpm.log (которые раздулись до 1.3Мб за трое
суток):

> May 01 21:59:21.120835 [NOTICE] fpm_got_signal(), line 70: received SIGCHLD
> May 01 21:59:21.121057 [WARNING] fpm_children_bury(), line 229: child 16887 (pool default) exited on signal 11 SIGSEGV after 2.860479 seconds
> May 01 21:59:21.122326 [NOTICE] fpm_children_make(), line 305: child 16917 (pool default) started

Периодически проскакивает:

> May 01 22:18:00.173331 [WARNING] fpm_stdio_child_said(), line 191: child 26441 (pool default) said into stderr: "zend_mm_heap corrupted"

И ещё реже:

> May 01 23:02:38.926223 [WARNING] fpm_stdio_child_said(), line 191: child 53349 (pool default) said into stderr: "chown: not found"

Вырезки из nginx логов:

> 2008/05/01 22:31:45 [warn] 18586#0: *10253 an upstream response is buffered to a temporary file /var/tmp/nginx/fastcgi_temp/0/00/0000000000 while reading ups tream...
> 2008/05/01 23:21:42 [error] 18586#0: accept() failed (53: Software caused connection abort) while accepting new connection on 0.0.0.0:80


Как? :)
Я разработчик, а не администратор сервера. И лично для меня
исправление багов ПО сервера очень неинтересное занятие.

P.S.
Спасибо большое за объяснение, что означают содержимое патч-файла.
Можете дать ссылку на хорошее описание синтаксиса патч-файла?

On 2 май, 15:52, Antony Dovgal <t...@daylessday.org> wrote:
> On 01.05.2008 20:06, anlide wrote:
>
> > Та ситуация такая, что год работал под Debian Linux и всё было
> > замечательно. А вот теперь месяц мучаюсь под FreeBSD, и скоро перееду
> > на сервер с ОСью Debian Linux. Ну вот скажите - зачем мне разбираться
> > как ставить патчи типаhttp://news.php.net/php.cvs/47376? Я за свою

Antony Dovgal

unread,
May 4, 2008, 4:25:42 AM5/4/08
to highloa...@googlegroups.com
On 04.05.2008 02:53, anlide wrote:
> Я разработчик, а не администратор сервера. И лично для меня
> исправление багов ПО сервера очень неинтересное занятие.

Разработчики бывают разные - я, например, именно этим и занимаюсь в основном =)

> Спасибо большое за объяснение, что означают содержимое патч-файла.
> Можете дать ссылку на хорошее описание синтаксиса патч-файла?

http://en.wikipedia.org/wiki/Diff
и http://en.wikipedia.org/wiki/Diff#Unified_format в частности

--
Wbr,
Antony Dovgal

Rauan Maemirov

unread,
May 4, 2008, 6:42:49 AM5/4/08
to highload-php-ru


On May 4, 4:53 am, anlide <elfanl...@gmail.com> wrote:
> Периодически проскакивает:
>
> > May 01 22:18:00.173331 [WARNING] fpm_stdio_child_said(), line 191: child 26441 (pool default) said into stderr: "zend_mm_heap corrupted"

У меня такая ошибка выходила, если я при загруженном(работающем)
сервере останавливал pgPool.

Означает ли обнуление mex_requests то, что php-fpm сам будет
проставлять его в зависимости от загруженности?

Andrei Nigmatulin

unread,
May 6, 2008, 12:02:51 PM5/6/08
to highloa...@googlegroups.com
On Sunday 04 May 2008 02:53, anlide wrote:
> Третьи сутки полёт нормальный. 220000 обращений к серверу в день.
> Рассказываю что сделал. Есть в конфиге php-fpm интересная настройка:
> "max_requests". Она устанавливается в ноль и php-fpm больше не падает.
>
> Вырезки из лог файла php-fpm.log (которые раздулись до 1.3Мб за трое
>
> суток):
> > May 01 21:59:21.120835 [NOTICE] fpm_got_signal(), line 70: received
> > SIGCHLD May 01 21:59:21.121057 [WARNING] fpm_children_bury(), line 229:
> > child 16887 (pool default) exited on signal 11 SIGSEGV after 2.860479
> > seconds May 01 21:59:21.122326 [NOTICE] fpm_children_make(), line 305:
> > child 16917 (pool default) started
>
> Периодически проскакивает:
> > May 01 22:18:00.173331 [WARNING] fpm_stdio_child_said(), line 191: child
> > 26441 (pool default) said into stderr: "zend_mm_heap corrupted"

Установите вышеуказанный патч.

> И ещё реже:
> > May 01 23:02:38.926223 [WARNING] fpm_stdio_child_said(), line 191: child
> > 53349 (pool default) said into stderr: "chown: not found"

Ваш скрипт наивно полагает, что запущен от root.

> Вырезки из nginx логов:
> > 2008/05/01 22:31:45 [warn] 18586#0: *10253 an upstream response is
> > buffered to a temporary file /var/tmp/nginx/fastcgi_temp/0/00/0000000000
> > while reading ups tream... 2008/05/01 23:21:42 [error] 18586#0: accept()
> > failed (53: Software caused connection abort) while accepting new
> > connection on 0.0.0.0:80
>
> Как? :)
> Я разработчик, а не администратор сервера. И лично для меня
> исправление багов ПО сервера очень неинтересное занятие.

А зачем тогда пытаетесь настраивать сервер ? Наймите администратора.

Andrei Nigmatulin

unread,
May 6, 2008, 1:49:07 PM5/6/08
to highloa...@googlegroups.com

Нет, это означает max_requests == unlimited.

Может и будет работать, но с практической точки зрения смысла нет.

anlide

unread,
May 12, 2008, 8:03:50 AM5/12/08
to highload-php-ru
Договорился с другом, он будет настраивать сервер. Платное
администрирование ещё не по карману.

Переезд на Debian Linux, да и вообще на выделенный сервер прошёл
замечательно. А отзывы о php-fpm только положительные! Работает шустро-
быстро, лог файл кристально чистый. Хотя ещё рано говорить о
стабильности работы (сейчас оно работает только сутки в продакшн-
режиме на новом сервере)...

Т.к. друг лучше разбирается в FreeBSD - то в перспективе будет переезд
на FreeBSD и эта тема для меня снова станет актуальной.


> Нет, это означает max_requests == unlimited.
Ещё какой смысл есть! Для старого сервера на FreeBSD эта опция просто
спасала ситуацию. Незнаю что там происходил, но php-fpm работал
стабильно.
Reply all
Reply to author
Forward
0 new messages