ImageMagick変換と低RAM


12

imagemagickパッケージの次のコマンドを検討してください。

sudo convert -resize 460x200 /path/to/test1.jpg /path/to/test2.jpg

test1.jpgかなり大きな画像(12.5MB)ですが、前代未聞のサイズではありませんが、作業中のサーバーには1Gのメモリしかありません(Amazon EC2 t2.microが役立つ場合)

エラーはスローされず、まだtest2.jpg作成されていません。私はこれをより小さな画像でテストしましたが、うまくいきます。サイズ変更を管理するのに十分なメモリがある場合は1Gを考えていましたが、おそらくそうではないでしょうか?

私のオプションは何ですか、より多くのメモリを取得する必要がありますか、何か不足していますか?

どんな提案も大歓迎です!

リクエストされた編集

straceの出力は次のとおりです。通常のコマンド(画像データであると想定される長い文字列を開いて読み取る)の多くのコマンド+++ killed by SIGKILL +++とともに/usr/share/local

無料で提供されます:

         total       used       free     shared    buffers     cached
Mem:       1016292     278348     737944       6412        460      13356
-/+ buffers/cache:     264532     751760
Swap:            0          0          0

スワップが有効になっていないように見えるので、スワップファイルの作成を調べて、これが私の問題をソートするかどうかを確認します。

ファイルは私に与えます:

testprint10Mbv2.jpg: JPEG image data, EXIF standard

完全な/ path / to / imgも貼り付けますが、残念ながら機密データ(クライアントのメールアドレスなど)が含まれています


1
sudoこのコマンドで使用しているのはなぜですか?
チャールズグリーン

1
私はしなかったとき、受信したメッセージを「殺した」
Aphire

3
Ypuは、引数を使用してピクセルキャッシュに使用されるメモリを制限しようとすることがあります-limit memory 64MiB(32MiBはおそらく少なすぎます。デフォルトは1.5GiBです)。また、失敗した場合に備えて説明的な出力を提供する必要があります。
dadexix86

2
コマンドのstrace前にコマンドを追加して実行してみてください。どのシステムコールが行われ、エラーがスローされたかを確認してください。お知らせください
セルギーKolodyazhnyy

2
できた 解決してくれてうれしいです!無料の出力はスワップがオフであることを確認し、ファイル情報はそれが誤って識別されたファイルではないことを確認します。素敵な編集!+1
オタク長老

回答:


7

私はあなたがRAMを使い果たしていると仮定しています。watch cat /proc/meminfoプロセスの実行中にこれを確認できます。

タスクを実行するには、RAMやSWAPが不足している可能性があります。

低RAM状態のため、スワップがオンになっていることswapon -aを確認し、システムにスワップがセットアップされていない場合は、未使用のディスクスペースにスワップ用のパーティションを作成して有効にします。これで問題が解決する可能性があります。それを行う方法についての@Takkatによって良い答えがありますここでは、あなたが使用することもでき、サーバ分割へのアクセス権がない場合は、スワップ用のスワップファイルを


1
OPはクラウドサーバーに関するものであり、スワップパーティションを作成することはオプションではない場合があります。新しいスワップファイルの追加方法も追加できます。
user.dz

@Sneetsherそれはまさに私がやったこと、良いコメント
アフィア

@Sneetsher「OPはクラウドサーバーについて」という質問のデータから(少なくとも私には)明確ではありませんでしたが、あなたは良い点を指摘しています。編集の答え。
オタク長老

@ElderGeek、実際には強調されていませんが、Amazon EC2 t2.micro質問を編集して、他の関連する質問に簡単にリンクできるようにタグを明確に追加しました。
user.dz

@スニーツシャー私は今それを見る。ご尽力ありがとうございました!
オタク長老

5

質問の問題は、適切なスワップを追加することで解決されました。完全を期すためconvertに、低メモリシステム上の巨大なファイルでImage Magick を実行する場合、スワップが利用できない場合、またはスワップが小さすぎる場合の追加オプションの概要を説明します。

以下に説明する方法は、Image Magickマニュアルで詳しく説明されています。

本当に大規模な画像処理


概要:

  1. オプションでメモリ使用量を制限する -limit

    これにより、Image Magickは、指定されたメモリ制限を超えるとすぐに、画像処理用の一時ファイルを作成します。これには、一時ファイルディレクトリに対するImage Magickの書き込み権限が必要です。一時ファイルが作成される任意のパスを環境変数に指定できますMAGICK_TMPDIR。コマンド例は次のようになります。

        env MAGICK_TMPDIR=/tempdir nice -5 convert -limit memory 32 -limit map 32 largefile.jpg -resize 640x320 smallfile.png
    

    RAMではなくディスクで作業すると、処理速度が大幅に低下します。

  2. 「メモリマップドディスクファイル」で作業する

    MPCファイルの作成にはリソースが必要ですが、MPCファイルから変換するのにそれほど多くのリソースは必要ありません。したがって、同じソースを異なるパラメーターで数回変換する必要がある場合に考慮されます。ワークフローは次のようになります。

    convert huge.jpg huge.mpc
    convert huge.mpc -resize 50% big.png
    convert huge.mpc -resize 20% small.png
    convert huge.mpc -resize 5% thumb.png
    
  3. を使用して画像の小さなセクションで作業する stream

    ストリームクレームを使用して、イメージ全体をメモリに読み込むことなく、ソースイメージの一部のみを処理します。

    stream -map rgb -storage-type char -extract 600x400+1900+2900 image.png - | convert -depth 8 -size 600x400 rgb:- tile.png
    

    上記の例では、-extractオプションはImage Magick ジオメトリで定義されたサイズとオフセット値を取ります。全体としてスケーリングされた画像を取得するには、タイルを元に戻す必要があります。残念ながら、ストリームはすべての画像形式で機能するわけではありませんが、JPEG画像では正常に機能するはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.