WebOhere 8.5.5中的ImageIO.read/write速度很慢

时间:2014-01-13 14:18:31

标签: tomcat7 javax.imageio websphere-8 imgscalr

作为我的网络应用程序的一部分,我使用javax.imageio.ImageIO来阅读/撰写BufferedImage。 最初我的应用程序在 Tomcat 7 上运行,并且它运行得非常快。由于我已将我的应用程序部署到 WebSphere 8.5.5 ,因此读/写性能显着降低(慢几倍)。

起初,我认为由于IBM的JVM,ImageIO在WebSphere上表现不好,所以我已经将Tomcat配置为使用IBM Java,而且它在WebSphere上的表现要好得多。 使用 Tomcat 需要 2.5secs 并使用 WebSphere 12secs 来读取,处理和写入图像(大小〜= 200KB)。

我是否可以使用某些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

Windows 7

是否有任何我不知道的WebSphere配置,这可以加快处理速度?

1 个答案:

答案 0 :(得分:1)

分析后,我发现了响应缓慢的原因。

WebSphere在图像处理过程中消耗的大部分时间都是由 ResampleOp类,具体为:

com.twelvemonkeys.image.ResampleOp.resample

方法是图像调整大小过程的瓶颈。使用原生Java AffineTransform我无法获得质量好的大小调整后的图像,因此我最终使用了imgscalr库。 imgscalr 在我的案例中表现非常好(Tomcat和WebSphere)以及高质量的图片。

我仍在使用Twelvemonkey的JPEGImageReader来正确读取CMYK JPEG图像。

<强>更新

调整我使用ResampleOP的代码是:

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

使用Scalr,我现在使用的代码是:

BufferedImage rescaledImage = Scalr.resize(image, width, height);
相关问题