Java ImageIO突然停止在Tomcat 7上运行

时间:2016-01-29 16:43:04

标签: java tomcat7 javax.imageio jai

我们在tomcat 7下运行一个servlet,它将存储的TIFF图像转换为JPEG,以便使用Java Advanced Imaging库在Web应用程序中显示。这个servlet自2011年以来一直在运行。但是,最近,它已经开始在一个非常奇怪的位置失败。我们可以毫无问题地读取TIFF图像,但是当我们尝试将转换结果写入缓存文件时,我们对ImageIO.createImageOutputStream的调用开始返回null。

我无法在tomcat日志中找到与此停止工作时相对应的任何错误。重启tomcat似乎暂时解决了这个问题,但似乎更频繁地发生了。据我所知,我们最近没有对java,tomcat或这个servlet中运行的代码进行任何更改。我们在tomcat的lib文件夹中有JAI库,而不是Web应用程序。是什么导致这个图书馆在白天突然失败?

相关代码部分:

//Get a JPEG writer and write the converted image to the output stream
        ImageWriter writer = null;
        Iterator<ImageWriter> writers = ImageIO.getImageWritersByMIMEType("image/jpeg");

        if(writers.hasNext()){
            writer = writers.next();
        } else {
            System.out.println("No JPEG Writer!");
            return;
        }

        FileOutputStream fos = new FileOutputStream(cacheFile);
        ios = ImageIO.createImageOutputStream(fos); //This is what is returning null
        writer.setOutput(ios);
        writer.write(resizedImage);
        fos.close();

2 个答案:

答案 0 :(得分:0)

无法创建输出文件时返回null。见Javadoc。您已更改了文件名,或其生成方式,或目标目录上的权限等。

与ImageIO无关。

答案 1 :(得分:0)

鉴于这不会立即发生,这可能是某种资源泄漏,无论是文件句柄的内存。你在Tomcat的标准输出中看到任何OutOfMemory吗?你能运行lsof并查看是否有太多打开的文件句柄?