php-fpm/nginx 経由で画像処理を使用する際のシステム負荷を軽減

php-fpm/nginx 経由で画像処理を使用する際のシステム負荷を軽減

Code Igniter で記述された、i​​magemagic に基づく PHP 画像 API があります。nginx/php-fpm の背後に API があります。Imagemagic 部分が重いことは承知していますが、全体的なスループットをどんどん高めるように努めています。

私たちは、Nginx に関する 30 を超える最適化記事を読みました。主に記事に従って TCP の最適化を行うことで、出力を 300 リクエスト/分から 350 リクエスト/分に増やすことができました。

これにより、サーバーのロード時間に重大な影響が出ました。これは新しいボックスで、Nginx ベースなので、平均負荷はわかりません。以前は Apache ワーカー (1 分あたり 300 リクエスト未満) がありました。現在は 1 分あたり 350 リクエストで平均負荷は 20 です。これは多すぎるので、改善を検討しています。

htop を使用してプロセスを調査すると、通常、16 個の CPU すべてを大量に使用している php-fpm のプロセスが約 20 個あり、メモリは 24 GB のうち 2 GB 程度であることがわかります。

システム負荷を大幅に削減することを目指しています。経験豊富なユーザーの皆様には、どこを調べればよいか、何を試せばよいか、知識を共有していただきたいと思います。ご要望の数字はすべて投稿しますが、最初からその投稿で埋め尽くすつもりはありませんでした。

システム負荷を軽減しながらスループットを維持するにはどうすればよいでしょうか。

答え1

これは純粋に CPU を大量に消費する問題 (iowait なし) であることがわかったので、リソースを追加せずに同じスループットを維持する方法は実際にはわかりません。PHP プロセスの最大数を減らすか、CPU コアを追加してください。

または、開発者に ImageMagick 以外のものを使用するように依頼します。

答え2

リクエストが繰り返される場合は、fastcgiキャッシュを確認してください(http://wiki.nginx.org/HttpFastcgiModule) または、nginx の前で varnish を使用します。

これにより、処理された画像をキャッシュできるようになり、負荷の高い CPU プロセスを再度実行する必要がなくなります。

答え3

質問ではPHP-FPMプロセスがTOP CPUにあると述べられているので、ImageMagick PHPライブラリを使用していると思います(http://php.net/imagick)。

開発者に、ImageMagick バイナリによって直接画像処理が実行されるシナリオ (例: /usr/bin/[compare、import、display ...]) をテストするよう依頼します。

バイナリを直接使用して機能する場合は、php 関数 exec() を使用して、ImageMagick バイナリへの呼び出しをカプセル化し、それがどのように機能するかを確認します (CPU と期間の観点から)。

@追加情報:https://stackoverflow.com/questions/4323672/how-do-i-get-imagemagick-installed

答え4

開発者のやり方

  1. 画像処理の PHP オーバーヘッドを削減してみてください。
  2. 画像処理に使用するリソースを少なくするようにしてください。用意した画像を使用するか、パフォーマンス要件の少ない操作をいくつか変更します。

管理者の方法

  1. より強力なCPUを使用する

関連情報