Уменьшите нагрузку на систему при использовании обработки изображений через php-fpm/nginx

Уменьшите нагрузку на систему при использовании обработки изображений через php-fpm/nginx

У нас есть API для работы с изображениями PHP, написанный в Code Igniter на основе imagemagic. У нас есть API, лежащее в основе nginx/php-fpm. Мы знаем, что часть Imagemagic тяжелая, но мы стараемся сделать общую пропускную способность все выше и выше.

Мы просмотрели более 30 статей по оптимизации Nginx. Мы смогли увеличить производительность с 300 запросов/минуту до 350 запросов/минуту, в основном следуя статьям и выполняя оптимизации TCP.

Этим мы серьезно повлияли на время загрузки сервера. Я могу сказать, что средней нагрузки нет, так как это новый ящик, и он основан на Nginx. У нас были Apache workers (менее 300 запросов/минуту). Теперь при 350req/m у нас средняя нагрузка 20. Это слишком много, и мы хотим улучшить.

Когда мы используем htop для исследования процессов, обычно мы видим около 20 процессов php-fpm, которые интенсивно используют все 16 ЦП, а память составляет где-то 2 ГБ из 24 ГБ.

Мы стремимся радикально снизить нагрузку на систему. Я хотел бы, чтобы опытные пользователи поделились своими знаниями, где искать, что пробовать. Я опубликую любые цифры, которые вы запросите, но я не хотел заполнять этим пост в начале.

Как бы вы поступили, чтобы снизить нагрузку на систему, сохранив при этом пропускную способность?

решение1

Поскольку мы установили, что это проблема чистого CPU-пожирателя (без iowait), то я действительно не вижу способа сохранить ту же пропускную способность без добавления дополнительных ресурсов. Либо уменьшите максимальное количество PHP-процессов, либо добавьте больше ядер CPU.

Или заставить разработчиков использовать что-то другое, а не ImageMagick..

решение2

Если у вас повторяются запросы, вы можете проверить кэш fastcgi (http://wiki.nginx.org/HttpFastcgiModule) или используйте Varnish перед nginx.

Это позволит вам кэшировать обработанные изображения и не придется снова выполнять тяжелые процессы ЦП.

решение3

Поскольку в вашем вопросе указано, что процессы PHP-FPM находятся в TOP-процессоре, я полагаю, что вы используете библиотеки PHP ImageMagick (http://php.net/imagick).

Попросите своего разработчика(ов) протестировать сценарий, в котором обработка изображений выполняется непосредственно двоичным файлом ImageMagick (например, /usr/bin/[compare, import, display ...].

Если использование двоичного файла напрямую работает, то используйте функцию php exec() и инкапсулируйте вызов двоичных файлов ImageMagick, а затем посмотрите, как это будет работать (с точки зрения загрузки ЦП и продолжительности).

@Дополнительная информация:https://stackoverflow.com/questions/4323672/how-do-i-get-imagemagick-installed

решение4

Пути разработчиков

  1. попробуйте уменьшить нагрузку на PHP при обработке изображений.
  2. попробуйте использовать меньше ресурсов для обработки изображений. Используйте подготовленные изображения или измените некоторые операции с меньшими требованиями к производительности

Административный путь

  1. использовать более мощные процессоры

Связанный контент