Imagemagickパッケージの次のコマンドを検討してください。
Sudo convert -resize 460x200 /path/to/test1.jpg /path/to/test2.jpg
test1.jpg
はかなり大きな画像(12.5MB)ですが、前代未聞のサイズではありませんが、作業中のサーバーには1Gのメモリしかありません( Amazon EC2t2.micro 役立つ場合)
エラーはスローされていませんが、test2.jpg
は作成されていません。私はこれをより小さな画像でテストしましたが、うまく機能します。サイズ変更を管理するのに十分なメモリがある場合は1Gを考えていたでしょうが、おそらくそうではないでしょうか?
私のオプションは何ですか、より多くのメモリを取得する必要がありますか、何か不足していますか?
どんな提案も大歓迎です!
リクエストされた編集
straceの出力は次のとおりです。+++ killed by SIGKILL +++
とともにalotに見える通常のコマンド(/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も貼り付けますが、残念ながら機密データ(クライアントのメールアドレスなど)が含まれています
私はあなたがRAMを使い果たしていると仮定しています。プロセスの実行中にwatch cat /proc/meminfo
でこれを確認できます。
タスクを実行するには、RAMやSWAPが不十分な場合があります。
低RAM状態のため、swapon -a
でスワップがオンになっていることを確認し、システムでスワップが設定されていない場合は、未使用のディスクスペースにスワップ用のパーティションを作成して有効にします。これで問題が解決する可能性があります。 @Takkatがそれを行う方法について良い答えがあります here サーバーのパーティション分割にアクセスできない場合は、 swapのスワップファイル も使用できます
質問の問題は、適切なスワップを追加することで解決されました。完全を期すために、低メモリシステム上の巨大なファイルでImage Magick convert
を実行する場合、スワップが利用できない場合、またはスワップが小さすぎる場合の追加オプションの概要を説明します。
下記の方法は、Image Magickのマニュアルで詳しく説明されています。
概要:
オプションでメモリ使用量を制限 -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ではなくディスクで作業すると、処理速度が大幅に低下します。
「メモリマップドディスクファイル」の操作
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
stream
を使用して画像の小さなセクションで作業する
streamを使用すると、ソースイメージの一部のみを処理し、イメージ全体をメモリにロードする必要がなくなります。
stream -map rgb -storage-type char -extract 600x400+1900+2900 image.png - | convert -depth 8 -size 600x400 rgb:- tile.png
上記の例では、-extract
オプションは、Image Magick geometry で定義されているサイズとオフセット値を取ります。全体としてスケーリングされた画像を取得するには、タイルを元に戻す必要があります。残念ながらstreamはすべての画像形式で機能するわけではありませんが、JPEG画像では正常に機能するはずです。