0

Web アプリケーションの一部として、BufferedImageの読み取り/書き込みにjavax.imageio.ImageIOを使用しています。当初、私のアプリはTomcat 7で実行されていましたが、非常に高速に実行されていました。アプリをWebSphere 8.5.5にデプロイしてから、読み取り/書き込みのパフォーマンスが大幅に低下しました (数倍遅くなりました)。

最初は、IBM の JVM が原因で ImageIO の WebSphere でのパフォーマンスが悪いと思っていたので、IBM Java を使用するように Tomcat を構成しました。イメージ (サイズ ~= 200KB) の読み取り、処理、および書き込みに、Tomcatでは2.5WebSphereでは 12 秒かかります。

イメージの読み取りを高速化するために使用できる IBM JVM 固有の構成はありますか?

私が使用するコードからの抜粋は次のとおりです。

// srcImagePath & dstImagePath are both pointing 
// to the location outside app servers

BufferedImage image = ImageIO.read(new File(srcImagePath));

// here I am only resizing image using com.twelvemonkeys.image.ResampleOp
// from twelvemonkeys library
BufferedImage destImage = resizeImage(image);

ImageIO.write(destImage, "jpg", dstImagePath);

これが私が使用した(変更された)JVM構成です:

Tomcat 7.0.50 : -Xms512m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=512m

WebSphere 8.5.5 : 初期ヒープ サイズ 512m、最大ヒープ サイズ: 1280m

IBM Java 1.7_64

ウィンドウズ7

私が認識していない、処理を高速化できる WebSphere 構成はありますか?

4

1 に答える 1

1

プロファイリングの後、応答が遅い理由がわかりました。

画像処理中に WebSphere で消費される時間のほとんどは、ResampleOp クラスによって引き起こされました。具体的には、次のとおりです。

com.twelvemonkeys.image.ResampleOp.resample

方法が画像リサイズ処理のボトルネックでした。ネイティブ Java のAffineTransformでは、高品質のサイズ変更された画像を取得できなかったため、imgscarライブラリを使用することになりました。imgscarは、私の場合 (Tomcat と WebSphere の両方) で非常に優れたパフォーマンスを発揮し、高品質の写真が表示されます。

CMYK JPEG 画像を正しく読み取るために、Twelvemonkey の JPEGImageReader をまだ使用しています。

アップデート:

ResampleOP で使用したサイズ変更コードは次のとおりです。

ResampleOp resampleOp = new ResampleOp(width, height);
BufferedImage rescaledImage = resampleOp.filter(image, null);

Scalr で、私が現在使用しているコードは次のとおりです。

BufferedImage rescaledImage = Scalr.resize(image, width, height);
于 2014-01-13T17:49:13.897 に答える