【问题标题】:ImageIO.read/write slow in Websphere 8.5.5Websphere 8.5.5 中的 ImageIO.read/write 慢
【发布时间】:2014-01-14 04:25:52
【问题描述】:

作为我的网络应用程序的一部分,我使用javax.imageio.ImageIO 来读取/写入BufferedImage。 最初,我的应用程序在 Tomcat 7 上运行,而且运行速度非常快。自从我将我的应用程序部署到 WebSphere 8.5.5 后,读/写性能显着下降(慢了几倍)。

起初,我认为 ImageIO 在 WebSphere 上表现不佳是因为 IBM 的 JVM,所以我将 Tomcat 配置为使用 IBM Java,但它再次在 WebSphere 上表现得更好。 使用 Tomcat 大约需要 2.5 秒,使用 WebSphere 12 秒 来读取、处理和写入图像(大小~= 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 配置可以加快处理速度?

【问题讨论】:

  • 如果您还没有这样做,您可以尝试将分析器连接到您的 WebSphere 进程,并查看时间花在了哪里。差异非常令人惊讶......
  • 我去看看,谢谢评论!

标签: tomcat7 javax.imageio websphere-8 imgscalr


【解决方案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);

【讨论】:

  • 但是你知道为什么它在 WebSphere 中比 Tomcat 慢吗?免责声明:我是课堂问题的作者,所以我想知道为什么,如果可能的话,做点什么。如果它执行不合理,您可能还想为它创建一个issue。 :-)
  • 首先,感谢一个很棒的库:) 在我更新的答案中,您可以看到我为解决性能问题所做的代码更改。不幸的是,我无法弄清楚为什么在 WebSphere 中调整大小的效果如此糟糕。有问题的方法似乎是 ResampleOp.filter -> ResampleOp.sinc。如果有任何帮助,我将提供我的分析数据和示例图像。
  • 是的,请。 :-) 发过来,我看看。
  • PS:sinc(x)方法使用Math.sin(x)...难道是使用的Math库有区别?就像一个正在使用严格的数学,而另一个没有或类似的东西?现在只是猜测,可以通过更多信息给出更好的答案......
  • 这也是我最初的想法。但是由于 Tomcat 和 WebSphere 都在 IBM 的 JVM 上运行,所以我真的不明白为什么 ResampleOP 会出现性能问题。我在 github 上创建了 issue,如果您需要我提供更多信息,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
  • 1970-01-01
  • 2015-08-02
  • 1970-01-01
相关资源
最近更新 更多