У меня есть ситуация, в которой происходит следующее:
Мы находимся на линоде с 8-ядерным, 8 ГБ оперативной памяти, 2,6 ГГц - используя nginx + php-fpm - мы получаем очень высокие графики использования процессора (которые мы не хотим быть такими плохими соседями VPS) ...
У нас на сайте одновременно меньше 100 пользователей - поэтому эта ситуация также невероятно смущает - что наш процессор очень высок.
Мы используем очень неизвестный, возможно, интенсивно работающий с php, сомнительно ужасный Framework вместо хорошо известных, хорошо документированных, хорошо продуманных других сред, таких как WordPress или Drupal, в которых есть много документации о кэшировании (а также плагины который обрабатывает кеширование) php на платформе nginx + php_fpm.
Таким образом, у нас есть около 6 открытых процессов php-fpm, которые при запуске запускают по отдельности БОЛЬШОЕ (30+ и часто около 99%) количество процессоров - и я не имею ни малейшего представления, как помешать им использовать столько процессоров , Я не могу сказать, какие php-скрипты вызывают эти всплески, потому что они происходят постоянно ... обычно работает только 1 или 2, но когда все 6 запускаются, мы максимизируем все 8 процессоров.
Мой файл pool.d / www.conf имеет следующие настройки:
pm = dynamic pm.max_children = 10 pm.start_servers = 4 pm.min_spare_servers = 2 pm.max_spare_servers = 6
Мы выполнили эту настройку, потому что, как я понимаю, наша память на самом деле потрясающая (htop показывает 472/7000 + мегабайт, без подкачки и т. Д.), И мы могли бы обрабатывать гораздо больше процессов и разбивать строку в ожидании получения обработанный - НО, к сожалению, поскольку каждый процесс слишком интенсивен на нашем процессоре во время работы - мы в конечном итоге загоняем наш процессор через крышу - поэтому мы не можем обрабатывать достаточное количество процессов.
Вопрос в том, что мы можем сделать, чтобы уменьшить использование процессора процессами php-fpm, чтобы мы могли увеличить настройки в этом конфигурационном файле пула для php-fpm, а также да, /var/log/php5-fpm.log кричит на нас, чтобы увеличить наших детей и настроить / увеличить наши минимальные / максимальные / стартовые серверы. Но это делает нашу нагрузку в среднем сумасшедшей, как говорилось ранее. Как мы можем сделать это без необходимости использовать кеш или каковы наши варианты?
Моя идея? Я читал кое-что об использовании cpulimit, чтобы гарантировать, что ни один процесс не займет больше, чем выделенное количество процессоров - но разве это замедлит процесс, чтобы его нельзя было использовать? Или, таким образом, мы могли бы увеличить нашу способность запускать больше, чем несколько процессов - я также подумал о запуске двух пулов - один для нашего сайта, ориентированного на будущее (на который обращаются клиенты), и другой для бэкенда (который влияет на наш сайт, ориентированный на будущее, когда время -отчетные отчеты запускаются).
Я потратил несколько дней на исследования, поиск в Google и т. Д. По этой теме - и это трудно, потому что ситуация каждого человека настолько уникальна для их системы - проблема в том, что такая специфическая неслыханная, возможно, плохо написанная - структура - делает трудно найти решение. Мы пока не можем просто отказаться от этой структуры - мне нужно найти какое-то решение.
ОБНОВЛЕНИЕ: я реализовал memcache для хранения php-сессий - потому что фреймворк в значительной степени зависит от пользовательских сессий, а природа нашей системы такова, что сотрудники часто используют несколько вкладок одновременно - каждая из них возвращается к сессиям для подтверждения способностей / пользовательских данных / и т. Д. ... так что я надеюсь увидеть некоторое увеличение производительности от этого - пожалуйста, прокомментируйте это, если хотите, - я посмотрю, как это будет завтра, когда мы преодолеем наши пиковые периоды увеличения объема.