За последние 24 часа нас посетил 18061 программист и 1655 роботов. Сейчас ищут 1560 программистов ...

php-fpm

Тема в разделе "PHP для новичков", создана пользователем like2dev, 7 июн 2011.

  1. like2dev

    like2dev Активный пользователь

    С нами с:
    31 июл 2010
    Сообщения:
    24
    Симпатии:
    0
    Пожалуйста кому не трудно, объясните принцип работы php-fpm
     
  2. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Php запускается как демон. Внешний (по отношению к php) сервер по протоколу fastCGI передает запрос демону (какой файл исполнять), php выполняет этот файл и выдает ответ, внешний сервер транслирует его клиенту.
     
  3. like2dev

    like2dev Активный пользователь

    С нами с:
    31 июл 2010
    Сообщения:
    24
    Симпатии:
    0
    мне больше про process manager, например зачем он перезапускает пхп процесс, после опред. количество запросов, они как-то делят между собой запросы? spare_server - про это тоже хотел бы услышать, если можно. И что например если пришло 2к запросов, потом упало до 200, pm по убивает не нужные процессы?
     
  4. like2dev

    like2dev Активный пользователь

    С нами с:
    31 июл 2010
    Сообщения:
    24
    Симпатии:
    0
    и по какому принципу он увеличивает количество children ?
     
  5. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    А это все как в апаче.
    Если все чилдрены заняты, а запросы валят и валят - он рожает новых пачку, при этом в логах увидите сообщение, что, мол, все чилдрены заняты - рожаю еще. Когда запросов стало мало - ненужные чилдрены прибиваются. Суть тут в том, что адаптировать число чилдренов под текущую нагрузку, т.е. что бы все запросы обслуживались и был запас свободных чилдренов, ибо рожать чилдрена на каждый чих - очень затратно, нужнен запас переживать минипики нагрузки. spare_server - это и есть та пачка "свободных" запасных серверов, которую пытается поддерживать менеджер.

    Ну а перезапускается по очень простой причине - софт не идеален, возможны утечки памяти (т.е. занятая, но не используемая память, про которую процесс "забыл"). Самый оптимальный способ борьбы - перезапуск процесса, при котором вся его память высвобождается. Ставят обычно от нескольких сотен до нескольких тысяч запросов.
     
  6. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    ЗЫ: хочу отметить, что динамическое управление хорошо, если у вас на сервере много пулов запущено.. например, под разными юзерями. Т.е. что-то вроде хостинговых решений. Если серввер под один фиксированный проект и обслууживается одним пулом php - лучше ставить статическое число детей. Таким образом вы точнее прогнозируете распределение памяти на сервере. А то пойдут запросы - динамический пул начнет расти, отъедать память у кеша ФС - пойдет дополнительная нагрузка на диск, из-за чего начнет тупить база, увеличивая время отклика скрипта, а значит потребуется еще больше php воркеров... и приехали.
     
  7. like2dev

    like2dev Активный пользователь

    С нами с:
    31 июл 2010
    Сообщения:
    24
    Симпатии:
    0
    У меня облако у selectel nginx/php5-fpm/mysql . Там стоит 3 сайта, у одного 10к уников в день, у второго 3-5к уников, у третьего до 200. Так на них лучше статик поставить?
     
  8. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Для облака, полагаю, лучше динамический.. там же поресурсно оплата, вроде.
    C spare тут все очень просто.
    min_spare - это сколько изначально висит свободных процессов, ну и сколько этих свободных будет поддерживать менеджер. Т.е. повысилась нагрузка, скушала все свободные - менеджер дофоркает новых так, что бы было min_spare свободных. Это повышает скорость реагирования сервера на пики загрузки - для них уже есть готовые воркеры.
    max_spare - это когда нагрузка падает, освобождаются воркеры, менеджер начинает их прибивать до тех пор, пока их не станет max_spare.
    Еще раз отмечу, что это idle процессы. Т.е. допустим min_spare = 5, max_spare = 10. На текущий поток клиентов достаточно 7 php воркеров - их общее число в системе будет 7+5, т.е. 12. Клиенты повалили, теперь нужно уже 21 воркер для них, опять же число процессов будет 21+5=26. Пик клиентов ушел, опять для них достаточно 7 воркеров. Менеджер начинает прибивать лишние, но оставляет не менее max_spare ожидающих процессов, т.е. в системе будет 7+10=17.
    В общем, числа весьма эмпирические, нужно в реальных условиях подбирать. Но как правило это единицы, очень редко - десятки, и mix от max отличается незначительно... редко кода max больше min в два раза, обычно меньше.
    15к юников - это ничего не говорит, важны хиты и распределение нагрузки по времени. Мне кажется, что в вашем случае можно поставить min=5, max=5-10... и уже смотреть как идет отдача, смотреть логи fpm-а, что он говорит и т.д.
     
  9. like2dev

    like2dev Активный пользователь

    С нами с:
    31 июл 2010
    Сообщения:
    24
    Симпатии:
    0
    ну 100к-150к pageviews генерят где-то, но дальше я сам. Спасибо вам.