java - tomcat服务器上的outOfMemory java堆空间错误,没有出现在本地

标签 java spring hibernate tomcat

我正在使用 Java Spring 和 Hibernate 构建一个网站,并使用 Tomcat 7 作为服务器。 我有一个该站点的页面,一旦用户单击图像,就会加载其他两个图像。工作流程如下:

点击图片 -> 计算(spring 方法) -> 图片以 jpg 格式保存在服务器上 -> 从服务器更新图片并显示给客户端。

图像加载如下:

    response.setContentType("image/jpg");
    OutputStream out = response.getOutputStream();  
    FileInputStream in = new FileInputStream(xzCrossUrl);  
    int size = in.available();  
    byte[] content = new byte[size];  
    in.read(content);  
    out.write(content);  
    in.close();  
    out.close();

我知道这可能不是最好的方法,但我还没有太多经验。

在本地它工作正常,但是当我将.war 放在tomcat 目录并连接到服务器时,出现Java outOfMemory 堆空间问题,并且图像加载比本地慢得多。

我试图增加 tomcat 使用的内存,但它似乎不起作用;也许我做错了什么。

你能帮我解决这个问题吗?

非常感谢您!

最佳答案

我不能把它放在评论中,因为我没有足够的信誉,所以...

虽然这可能是您可以使用 Tomcat 配置修复的问题,但您拥有的代码不会针对任何图像进行缩放。您应该声明 byte[]成为一个固定大小,然后读写,直到你用完所有文件字节:

// as a class scoped constant<br/> private static final int BUFFERSIZE = 1024 << 8;

<pre><code>BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream(), BUFFERSIZE); BufferedInputStream in = new BufferedInputStream(new FileInputStream(xzCrossUrl)); int bytesRead = 0; byte[] content = new byte[BUFFERSIZE]; while((bytesRead = in.read(content) != -1){ out.write(content,0,bytesRead); } // Don't forget appropriate exception handling with a try/finally! in.close(); out.close(); </code></pre>

仅供引用:我在这里写的,不是在 IDE 中,也没有编译它,所以如果不完美,我深表歉意。希望你明白了要点。

关于java - tomcat服务器上的outOfMemory java堆空间错误,没有出现在本地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19590424/

相关文章:

java - 无法实例化 Pageable bean

java - Spring MVC上下文路径在哪里设置?

java - 无法从 Spring Boot 连接到 postgresql 架构 - 'org.postgresql.util.PLSQLException: ERROR: schema "测试“不存在”

spring - 在 Spring/Hibernate 中删除或更新之前验证对象是否存在

java - Google App Engine 中漂亮的 URL

java - JPA:使用附加属性映射多对多关系

java - Flex mxmlc 加载 JVM windows 7 64 位时出错

java - Spring MVC 页面上的访问路径属性值

Java、PostgreSQL 和 Hibernate : Select statement with nested strings

java - 使用 Java、R 和 JavaGD 绘制多个图形时出现问题?