Apache, php FastCGI process, perfomanse

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

Apache, php FastCGI process, perfomanse

Непрочитанное сообщение paix » 2007-09-24 14:18:00

Господа, вопрос в силу темы: (http://www.lissyara.su/?id=1360 Apache2 + php5 + mod_fastcgi)
Интересуют ньюансы производительности FastCGI (на офф. сайте я был конечно ;))

Есть серв в локальной сети
FreeBSD 6.2-R, Apache/1.3.37 + mod_fastcgi, Php -FastCGI, 2-3K hosts/day, < 25 requests/sec

Вообщем, насколько я понял работу FastCGI -
сразу после старта apache запускает PHP процесс через FastCGI враппер для каждого прописанного виртуалхоста.
Этот PHP процесс делает форки, согласно

Код: Выделить всё

PHP_FCGI_CHILDREN=4
export PHP_FCGI_CHILDREN
Т.е. сразу после старта вы увидите (ps -aux | grep php) 5 процессов php. Один родитель и четыре форка. Форки нужны для того, чтобы обрабатывать реквесты, если их прийдет одноврменно больше одного.

Все отлично, процессы висят и обрабатывают запросы от апача. Обработав запрос, процесс снова переходит в режим ожидания нового реквеста. Теперь, допустим, к сайту поступает одновременно несколько десятков обращений. Форков уже не хватает и (mod_fastcgi ? || PHP ?) начинает запускать новые процессы PHP, а те в свою очередь порождают чаилдов(по 4 чаилда на процесс). Таким образом одновременно может быть запущенно несколько десятков процессов(чаилдов) PHP, что мы и видим.

Код: Выделить всё

root@doors/: ps aux | grep php | wc -l
      85
Картина становиться все интересней ;)
Вопрос к спецам..
1) Правильно ли мое понимание работы apache+factcgi+php

2) Каким образом происходит распределение памяти?
Каждый процесс PHP-FastCGI по топу занимает около 9м(RES). Причем судя по всему все чаилды в основном использую shared mem родителя. Однако когда одновременно запущенно много процессов.... Могут ли процессы (не чаилды!) использовать память друг друга? У меня никак не получается 9м по анализу изменения памяти \ на колличество пхп процессов - получается меньше...около 7м на процесс, или около 1.5м из расчета на чаилда(общее колличество пхп процессов показываемых в топе или ps)

3) Иногда, колличество пхп процессов в 2-3 раза превышает колличество процессов апаче

Код: Выделить всё

root@doors: ps axv|grep httpd|grep -v grep|wc -l;     ps axu|grep php|grep -v grep|wc -l
      32
      55

что наводит на мысль, что некоторые "умные" браузеры запрашивают контент в несколько потоков, задействуя несколько чаилдов. Это весьма неприятно..... Подскажите способ, что запретить как апаче так и пхп отдавать более одного потока на host

4) Есть у кого положительный опыт использования php fastcgi с eaccelerator,memcached,xcache etc..

PS. просьба не советовать перейти на nginx|lighttpd я и так это собираюсь сделать ;) Интересуют ньюансы апаче и fastcgi в общем.
With best wishes, Sergej Kandyla

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2460 рублей (8 CPU, 8Gb RAM, 2x500Gb HDD, RAID 3ware 9750):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35092
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение Alex Keda » 2007-09-24 19:45:46

1. понимание верное.
2. даж не знаю :(
3. а это вообще интересная тема - я видел отпавшие форки.
т.е. апач останавливаешь, а процессы php-cgi висят...
что делать - не знаю, килляю ночью кроном...
хотя, хочется чаще раза в сутки, или добиться правильной работы.
Убей их всех! Бог потом рассортирует...

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение paix » 2007-09-26 15:39:28

У меня процессы нормально киляются при стопе апача. Да и вообще когда простаивают то нормально киляются. Ничего не болтается.

Код: Выделить всё

FastCgiConfig   -singleThreshold 50 -minProcesses 2 -maxProcesses 32 -restart  -idle-timeout 30 -killInterval 60   -autoUpdate -pass-header HTTP_AUTHORIZATION
с такими опциями у меня запущен.

Размышления\эксперименты на тему форков привели к странным результатам.

Как пишет автор (http://fastcgi.com/docs/faq.html#PHP), если не указывать PHP_FCGI_CHILDREN то по умолчанию запустится процесс PHP и 8 чаилдов. Лично у меня запустился только один процесс и никаких чаилдов!!! В такой конфигурации серв проработал больше пол суток, показав в пиковой загрузке макс 10 процессов php.

По идее, если сайт нагруженный, то большее число чаилдов будет плюсом, т.к. чаилды могут использовать шаред мемори родителя + уже запущено достаточное количество процессов-чаилодов для обработки входящих реквестов. Думая таким образом, я поставил PHP_FCGI_CHILDREN=15 (!)
Но, судя по всему, чаилы это не совсем то что мы думаем. Вернее они обрабатывают запросы както подругому.
На текущий момент:

Код: Выделить всё

Process httpd: 32
Process php: 145
Забавно?
Причем загрузка по памяти и по процессору примерно аналогичная как и без указания экспорта чаилдов. Т.е. когда их было запущено 10.

У меня большое подозрение, что все таки чаилды могут обслуживать не отдельные одновременные реквесты с разных хостов, а только потоковые реквесты от одного хоста. Никаким другим образом я такое поведение обьяснить не могу.
145 / 15 ~ 8-9 процессов-родителей. (остальные от других ненагруженных хостов)

Сейчас поствил
PHP_FCGI_CHILDREN=1
наблюдаю мртж ;)
With best wishes, Sergej Kandyla

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35092
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение Alex Keda » 2007-09-26 17:31:18

ну, когда под сайтом был отдельный сервер - я тоже эеспериментировал.
щас он на хостинге, там доступ есть - но много других сайтов - завоют если начтну эсперименировать.
кстати - какой-то чёткой зависимости от праметров не заметил - приложение само в себе - по каким принципам выбирается время жизни детей и сколько их ,будет в итоге - я так и не понял :(
Убей их всех! Бог потом рассортирует...

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение paix » 2007-09-26 18:06:18

Локалка - не продакшин ;) Вот и тестирую, пытаясь понять принципы работы, чтобы применить их в продакшин )
Колличество серверов мне все это позволяет....но вот далеко не всегда находится нагруженный проект, да еще и на каком можно поэксперементировать )

А вот что четкой зависимости от настроек нет...- чистая правда, у меня тоже такое впечатление...Даже maxproceses ему пофигу... возможно это все баги поделки mod_fastcgi

Хочу перевести все на более правильный fastcgi (через lighttpd) возможно, там будет более закономерно )
+ xcache )

PS. lissyara ты с нагруженными томкатами случайно не сталкивался?
With best wishes, Sergej Kandyla

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35092
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение Alex Keda » 2007-09-26 18:13:16

не. с серверами приложений вообще не доводилось работать.
=========
у меня голубая мечта - чистый nginx+php в виде fastcgi... :)
Убей их всех! Бог потом рассортирует...

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение paix » 2007-09-26 18:30:54

lissyara писал(а): у меня голубая мечта - чистый nginx+php в виде fastcgi... :)
Хех, у меня тоже ;)
Только для начала хочу потестить....

nginx + apache + php-fastcgi + xcache(?)
подкупает своей адаптивностью к разного рода хостингам

nginx + php-fastcgi + xcache(?)
lighttpd + php-fastcgi + xcache(?)
подкупает производительностью

xcache|APC|eAccelerator вестими опционально и после тестов

Ах да, еще и memcached for SQL requests :)

+ Это все на кластера кластера...)

И еще поставить zabbix и мониторить загрузки )

PS. останется только сделать какойнибудь нагруженный проект, чтобы эти связки нагрузить ;)
With best wishes, Sergej Kandyla

anight
проходил мимо

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение anight » 2007-09-28 0:16:37

ставьте http://php-fpm.anight.org/ и не парьтесь. готовое решение, работающее под ацкой нагрузкой. поддержку обеспечу по возможности.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35092
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение Alex Keda » 2007-09-28 0:19:23

anight писал(а):ставьте http://php-fpm.anight.org/ и не парьтесь. готовое решение, работающее под ацкой нагрузкой. поддержку обеспечу по возможности.
я прикидывал возможность нарисовать порт для хреновины.
давно ещё - несколько месяцев назад.
слишком много труда, приблуда работающая вся на патчах - того не стоит.
если сможете пропихнуть в порты - честь вам и хвала.
готов помочь.
но сам не возьмусь, и пока его нет в портах - другим не посоветую.
Убей их всех! Бог потом рассортирует...

anight
проходил мимо

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение anight » 2007-09-28 0:27:03

lissyara писал(а):
anight писал(а):ставьте http://php-fpm.anight.org/ и не парьтесь. готовое решение, работающее под ацкой нагрузкой. поддержку обеспечу по возможности.
я прикидывал возможность нарисовать порт для хреновины.
давно ещё - несколько месяцев назад.
слишком много труда, приблуда работающая вся на патчах - того не стоит.
если сможете пропихнуть в порты - честь вам и хвала.
готов помочь.
но сам не возьмусь, и пока его нет в портах - другим не посоветую.
у меня нет времени и желания что-то куда-то пропихивать. если вам нужен продукт - используйте. если есть желание пропихивать это в порты - помогу чем смогу.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35092
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение Alex Keda » 2007-09-28 1:17:19

а у меня нет желаний пихать один большой патч.
=====
если он реально куму-то нужен - давно бы был в портах.
а раз его там нет - значит кривой по самое [классический секс]
Убей их всех! Бог потом рассортирует...

anight
проходил мимо

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение anight » 2007-09-28 2:17:18

lissyara писал(а):а у меня нет желаний пихать один большой патч.
=====
если он реально куму-то нужен - давно бы был в портах.
а раз его там нет - значит кривой по самое [классический секс]
дык не пихайте.
а насчет кривости - с удовольствием выслушаю конструктив.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35092
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение Alex Keda » 2007-09-28 11:43:52

оно в портах есть?
нету.
значит НИКОМУ не не нужно.
Убей их всех! Бог потом рассортирует...

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение paix » 2007-09-28 13:25:03

anight Спасибо за проект ;) Весьма внушительный патч...в gz - пол метра..)

Я смотрел на php-fpm, но весьма отпугивает слишком скудная информация по нему. Не понятно что, как и зачем. Документации и коммунити соотвественно...

Запуск воркеров с разными uid/gid/chroot/environment и разными php.ini опциями
Подскажите как этим управлять?

Из расчета что есть сервер с несколькими нагруженными виртуалхостами. Для каждого виртуалхоста нужно запускать пхп с правами пользователя-владельца виртуалхоста и с кастомным пхп.ини


PS. я думаю проект весьма переспективный....только еще не успел распостраниться в силу вышеназванных причин. Ибо тема весьма актуальна...
With best wishes, Sergej Kandyla

anight
проходил мимо

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение anight » 2007-09-28 18:45:44

paix писал(а):anight Спасибо за проект ;) Весьма внушительный патч...в gz - пол метра..)

Я смотрел на php-fpm, но весьма отпугивает слишком скудная информация по нему. Не понятно что, как и зачем. Документации и коммунити соотвественно...

Запуск воркеров с разными uid/gid/chroot/environment и разными php.ini опциями
Подскажите как этим управлять?
Я планирую сделать вики и рассылку, но не представляю, когда дойдут руки.
Если в двух словах, то в php-fpm.conf в разделе <workers> находятся секции <section name="pool"> ... </section>
Их может быть несколько. Каждая из них описывает параметры отдельного пула воркеров, в том числе там можно указать uid/gid и специфичные php.ini опции. Все пулы воркеров независимы друг от друга. Предполагалось использовать разные пулы как раз под разные сайты.
paix писал(а): Из расчета что есть сервер с несколькими нагруженными виртуалхостами. Для каждого виртуалхоста нужно запускать пхп с правами пользователя-владельца виртуалхоста и с кастомным пхп.ини


PS. я думаю проект весьма переспективный....только еще не успел распостраниться в силу вышеназванных причин. Ибо тема весьма актуальна...
Да, действительно, раньше этот код был закрыт, не было времени его причесать, чтобы он был полезен и другим. В настоящий момент в виде отдельных патчей этот код используется на нескольких высоконагруженных проектах с общей посещаемостью около полумиллиарда исполненных php скриптов в сутки.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35092
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение Alex Keda » 2007-09-29 0:05:31

пока в портах не будет, в массы не пойдёт.
хоть отдельным портом, хоть галочкой с патчем к существующему.
===========
идея-то неплохая - но пока это набор мутных патчей - так и будет крутиться на нескольких серверах, а не многих.
Убей их всех! Бог потом рассортирует...

anight
проходил мимо

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение anight » 2007-09-29 11:35:35

lissyara писал(а):пока в портах не будет, в массы не пойдёт.
хоть отдельным портом, хоть галочкой с патчем к существующему.
===========
идея-то неплохая - но пока это набор мутных патчей - так и будет крутиться на нескольких серверах, а не многих.
Не надо сеять панику. В патче накладываются изменения всего лишь для двух .c файлов.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35092
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение Alex Keda » 2007-09-29 12:37:40

пока в портах не будет - в массы не пойдёт.
большая жирная точка.
Убей их всех! Бог потом рассортирует...

dwemer
проходил мимо
Сообщения: 3
Зарегистрирован: 2007-01-31 8:45:20

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение dwemer » 2007-09-29 19:28:31

использую nginx + php-fpm
доволен как слон
anight'у большое спасибо

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35092
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение Alex Keda » 2007-09-29 20:23:30

dwemer писал(а):использую nginx + php-fpm
доволен как слон
anight'у большое спасибо
поделись - как?
давно мечтаю уйти с апача в паре мест...
тока всё равно придётся порта ждать :(
Убей их всех! Бог потом рассортирует...

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение paix » 2007-10-01 10:52:54

lissyara своей категоричностью ты не прав (имхо).
Между прочим, нжинкс в режиме прокси тоже руками надо апач перекомпилять, и в портах этого нет. Что не мешает ему успешно жить на очень многих нагруженных сервах.
Портовые сборки все равно грешат свежестью и способностью к кастомным изменениям.

По поводу "Как" - очень просто.

В lighttpd и nginx архитектура немного другая. В чистом виде они висят и обрабатывают реквесты от пользователей.
Если приходит запрос для файла ".php" то вышеназванные сервы передают запрос на обработку к Php-fastcgi серверу. (естественно в конфиге это должно быть прописанно.) Ключевой момент: php должен быть запущен в режиме fastcgi и прослущивать либо порт либо unix socket.

В самом примитивном режиме запустить пхп для прослушивания порта можно:

Код: Выделить всё

# php-cgi -b 127.0.0.1:9000
Эта команда запускает встроенный FastCGI сервер PHP, слушающий соединения на интерфейсе 127.0.0.1 и порте 9000
На примере lighttpd:

Код: Выделить всё

fastcgi.server       = ( ".php" =>
                               ( "localhost" =>
                                 (
                                  "host" => "127.0.0.1",
                                  "port" => “9000”
                                  )
                               )
                            )
Все... Лайти передает все запросы к пхп на внешний PHP-Fastcgi сервер(127.0.0.1) Вестимо что PHP-Fastcgi сервер может быть и на другом хосте, причем может быть и не один.

К слову сказать, В лайти есть механизм для собственного запуска PHP сервера (Adaptive Process Spawning). Но это все грешит невозможностью указывать юзера, от которго будет запущен пхп серв.
Детальная инфа: http://trac.lighttpd.net/trac/wiki/Tuto ... ttpdAndPHP

Для решения проблемы запуска пхп в с правами юзера, кастомными конфигами и прочими настройками был придуман
spwan-fcgi, находящийся в комплекте Lighttpd. (Кстати пользователи nginx именно его и используют.)

Суть такая, создаем кастомный скрипт запуска PHP-FastCGI

Код: Выделить всё

#!/bin/sh
## ABSOLUTE path to the spawn-fcgi binary
SPAWNFCGI="/usr/bin/spawn-fcgi"
## ABSOLUTE path to the PHP binary
FCGIPROGRAM="/usr/bin/php-cgi"
FCGIPORT="1026"
## uncomment the PHPRC line, if you want to have an extra php.ini for this user
PHPRC="/var/www/fastcgi/paix/"
FCGI_WEB_SERVER_ADDRS="127.0.0.1"
USERID=paix
GROUPID=paix
<skip>
Запускаем данный скрипт, который уже запускает пхп-поол с правами юзера и кастомными настройками.
Детально: http://trac.lighttpd.net/trac/wiki/HowT ... ermissions

Все PHP-Fastcgi сервер запущен, слушает порт, висят процессы php-cgi от имени юзера.

Теперь в lighttpd or nginx указываем использовать нужный PHP-Fastcgi сервер. Для лайти я писал выше, для нжинкса аналогично:

Код: Выделить всё

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;

                        fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
                    fastcgi_param  QUERY_STRING     $query_string;
                    fastcgi_param  REQUEST_METHOD   $request_method;
                    fastcgi_param  CONTENT_TYPE     $content_type;
                    fastcgi_param  CONTENT_LENGTH   $content_length;
        }
Детально http://sysoev.ru/nginx/docs/http/ngx_ht ... odule.html
http://blog.kovyrin.net/2006/05/30/ngin ... o/lang/ru/

На счет php-fpm. Не нужно никаких spawn-fcgi скриптов. Автор уже написал необходимые патчи ;)
Т.е. php-fastcgi сервер (пхп спул) стартует просто при помощи Run $prefix/bin/php-cgi --fpm
Управлять спулами кастомными настройками как я понял можно путем редактирования $prefix/etc/php-fpm.conf
Правда эту конфигурацию я еще не тестил.

Вот собственно и все.
Кстати, в nginx-ru совсем другая встреча была php-fpm (см http://www.lexa.ru/nginx-ru/) ;)

Патчи весьма прогрессивные. Имхо, единественно в чем проигрывает fpm на неткущий момент - это
1) отсутствие документации
2) собственно сама суть патчей. В варианте spawn-fcgi любой самый новый пхп запускается весьма просто...

но эти все вопросы решаются путем коммунити. Если так оно и будет, то и портовые патчи появятся...

4 anight: трек взять не думал например ? (http://trac.edgewall.org/) Вроди симпотная система.
With best wishes, Sergej Kandyla

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35092
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение Alex Keda » 2007-10-01 12:08:20

надо порыть...
Убей их всех! Бог потом рассортирует...

kmb
лейтенант
Сообщения: 680
Зарегистрирован: 2007-02-20 8:30:03
Контактная информация:

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение kmb » 2007-10-13 12:21:33

а нету сравнения производительности php как модуля апач, как cgi и как fastcgi? Что-то помню раньше советовали ставить, как модуль, почему точно не помню...
truth is out there...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35092
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение Alex Keda » 2007-10-13 13:21:09

а потому что из этой троицы - быстрей всех.
Убей их всех! Бог потом рассортирует...

kmb
лейтенант
Сообщения: 680
Зарегистрирован: 2007-02-20 8:30:03
Контактная информация:

Re: Apache, php FastCGI process, perfomanse

Непрочитанное сообщение kmb » 2007-10-13 13:24:20

Дык, а почему кто-то использует FastCGI? В плане безопасности что ли?
truth is out there...