4

ImageMagick を使用して写真のサイズを変更すると、サーバーの速度が低下することに気付きました。を実行すると、同じ画像で同時に実行されてhtopいるいくつかの同様のコマンド (7) があることがわかります。これは ImageMagick の正常な動作ですか、それとも私のコードが同じ画像に対してconvertImagemagick を複数回実行したのでしょうか?convert

ImageMagick を使用していImageMagick 6.7.9-6 2012-09-18ます。

ここに画像の説明を入力

変換 --バージョン

Version: ImageMagick 6.7.9-6 2012-09-18 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
Features: OpenMP

追加情報

  • CentOS 6.3 i686 システムには 16 個のコアがあります。
  • 一般的な入力画像ファイルは約 10 ~ 100KB です。
  • 重複する (似ているだけではない) コマンドの数は、2 ~ 16 の範囲です。

ロギング

convertログは、同じ画像のサイズを 2 回変更するための呼び出しが重複していないことを示しています。

4

1 に答える 1

1

これをデバッグするには、さらに詳細が必要です。

  • 「... 同時にいくつかの同様の変換コマンド...」 : 「複数」とは正確にはいくつですか?!

  • このシステムにはいくつの CPU (コア) がありますか?

  • 正確にどの程度「似ている」か、この類似性の違いは何ですか?!

  • これらの類似したコマンド間の親子関係は何ですか?! (pstreeコマンド)

  • 典型的な入力画像の大きさは?!

の完全な出力も報告してくださいconvert -version

スクリーンショットで確認できる入力 JPEG のディレクトリから推測すると、これは Web サービスのようです。*アップロードごとに Web サービスによって開始される変換コマンドがいくつかないことを確認しますか? --画像を変換するたびに、Webクライアントが Web サービスに複数回アクセスしていないことを確認していますか?*


アップデート:

convert -versionレポートが 1 つの機能である場合OpenMP、ImageMagick はマルチスレッドであり、複数のスレッドを同時に実行して 1 つの大きな画像を処理できます。これにより、大きな画像ファイルを処理する場合に効率が大幅に向上します。(ただし、多数の小さなファイルを処理すると、全体的なパフォーマンスも大幅に低下する可能性があります...)

私の推測では、出力に複数 (16) の同時プロセスは表示されませんhtopが、複数 (16) の同時実行スレッドは表示されません。

小さなファイルを処理する一般的な使用例では、この環境変数を設定して、自動マルチスレッドを無効にして試してください。

MAGICK_THREAD_LIMIT=1

ImageMagick コマンドをベンチマークして、使用するスレッドの最適数に近づけることもできます。を追加する-bench iterationsと、特定のコマンドの 1 つ以上のスレッドの経過時間と効率が出力されます。

convert                                        \
  -bench 40                                    \
   /home/photos/public_html/2012/0926/some.jpg \
  -resize 300                                  \
   null:

ImageMagick 6.7.9 は、コマンドのベンチマーク中にプログレッシブ スレッドを適用できます。-bench( OpenMP 以外のインストールでテストするのはあまり意味がありません...)

公式の ImageMagick フォーラム でのこのディスカッションも参照してください。

于 2012-09-26T18:35:20.703 に答える