2017-05-22 23 views
1

私はAWS Lambdaに展開しているJavaで書かれたプログラムを用意しています。ImageMagick AWS Lambdaの大きな画像の変換エラーです

このプログラムは、LambdaにプリインストールされているImagickを使って、与えられた画像を異なるサムネイルに変換します。私がしようとすると、この設定で

imConvertPath = imPath + "convert -limit memory 1GB -limit map 1350MB"; 

、コードが数MB単位で小さい画像のために正常に動作しているが、:私たちは、アプリケーション内で変換コマンドが限られている一方で、最大1536メガバイトのメモリを使用するようにラムダのセットアップを持っています〜40MBの高解像度画像、このエラーで失敗します:

org.apache.commons.exec.ExecuteException: Process exited with an error: 135

このエラーは何を意味しますか?プログラムが何らかのSIG障害の問題に陥っていますか?

また、テストのために私のスタブコードを使ってこのプログラムを実行すると、問題なしにそれを変換することができます。

+0

を多分操作はImageMagickの中で設定することができ方針の一つであるディスクへのページングを開始する前に使用されますどのくらいのメモリの設定を確認してください。また、Amazonのサポートに連絡してください。 – Danack

+0

ImagickはAWSラムダでは4GBのメモリまたはディスクスペースが必要なため、変換に失敗しています。最大メモリは1536MB、ディスク容量は500MBなど これらの制限は、AWSサポートに依頼することで増やすことができますが、一方で制限を打つことになります。 –

答えて

1

どのように圧縮を行っているのかは分かりませんが、JPEG画像のサイズを変更する場合は、良いパフォーマンスを得るにはlibjpeg shrink-on-loadを使用する必要があります。私が見る10,000×万ピクセルRGB JPEG画像やIM 7.0.5-5と、このマシン(2012 IMAC)に例えば

、:

$ /usr/bin/time -l convert wtc.jpg -resize 500x500 x.jpg 
     6.87 real   6.06 user   0.51 sys 
1269547008 maximum resident set size 

だから、7Sとメモリの1.2ギガバイト程度。私はシュリンク・オン・ロードを使用する場合、あなたは何が必要ピクセル寸法JPEGローダーへのヒントところ、私は以下を参照してください。

0.3秒とメモリの34メガバイトまでダウン
$ /usr/bin/time -l convert -define jpeg:size=1000x1000 wtc.jpg -resize 500x500 x.jpg 
     0.32 real   0.27 user   0.02 sys 
    34181120 maximum resident set size 

これはJPEGファイルでのみ機能しますが、劇的に役立ちます。最終出力の2倍のサイズをヒントする必要があります。そうしないと別名が表示されます。

他のファイルタイプのパフォーマンスを向上させるには、他の画像サイズ変更プログラムを参照する必要があります。私は、libvips、ストリーミング画像処理ライブラリを維持するのに役立ちます。デコード、処理、再コード化を連続したピクセルストリームとして行うことができるため、画像全体をメモリに保存する必要はありません。

$ /usr/bin/time -l convert -define jpeg:size=1000x1000 big.jpg -resize 500x500 x.jpg 
     3.08 real   2.92 user   0.14 sys 
300138496 maximum resident set size 

3.1sとメモリの300メガバイト、しかし vipsthumbnail と私は以下を参照してください:

3万X3万JPEGで

を変換し、私が見

$ /usr/bin/time -l vipsthumbnail big.jpg --size 500x500 -o x.jpg 
     2.38 real   2.31 user   0.06 sys 
    28385280 maximum resident set size 

2.4sとし28MBのメモリ

シュリ​​ンクオンロードシステムがないTIFFのようなフォーマットでは、その差ははるかに大きくなります。 10,000×万のRGB TIFFで、私は以下を参照してください。

メモリの
$ /usr/bin/time -l convert wtc.tif -resize 500x500 x.jpg 
     5.81 real   4.97 user   0.60 sys 
1503449088 maximum resident set size 

5.8Sと1.5ギガバイト、対:

メモリの
$ /usr/bin/time -l vipsthumbnail wtc.tif --size 500x500 -o x.jpg 
     1.43 real   0.47 user   0.08 sys 
    42360832 maximum resident set size 

1.4秒と42メガバイト

非常にいいノードがあります。

https://github.com/stechstudio/libvips-lambda

があります:ラムダに痛みを伴わずに展開、またはあなたがJavaからのコマンドラインvipsthumbnailプログラムを使用したい場合は、様々なビルダーは、例えば、あるでしょうlibvipsに基づいてsharpと呼ばれるJS画像リサイズパッケージブログの記事ここvipsthumbnailを導入:

http://libvips.blogspot.co.uk/2013/11/tips-and-tricks-for-vipsthumbnail.html

関連する問題