2013-10-25 41 views
0

我正在使用Java Spring和Hibernate構建一個網站,並使用Tomcat 7作爲服務器。 我有一個這個網站的頁面,其中,一旦用戶點擊圖像加載其他兩個圖像。工作流程如下:outOfMemory在Tomcat服務器上的java堆空間錯誤,本地不出現

圖像點擊 - >計算(彈簧方法) - >保存在服務器上的圖像爲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使用的內存,但它似乎不工作;也許我做錯了什麼。

你能幫我解決嗎?

非常感謝您提前!

+0

請嘗試以下步驟先在這裏說:http://stackoverflow.com/questions/2718786/how- to-increase-java-heap-space-for-a-tomcat-app – ogzd

+0

謝謝你的鏈接。我試圖增加tomcat堆空間,但它沒有解決問題。我會盡快安裝jprofile並讓你知道 – LeviathanS17

回答

1

我不能把這個評論,因爲我沒有足夠的可信度,所以......

雖然它可能是一些你可以用Tomcat配置解決,你有什麼樣的代碼不會結垢爲任何圖像。你應該申報byte[]是一個固定的大小,然後讀,寫,直到你消耗了所有文件的字節:

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

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(); 

FYI:我寫這這裏,而不是在一個IDE並沒有編譯它,所以我很抱歉,如果不完美。希望你能獲得要點。

+0

感謝您的回答。你在這段時間錯過了一個支架,但沒關係:) 不幸的是,這並沒有解決我的問題。 我開始認爲這個問題出現在計算部分。 我不知道這個問題是否也可能出現在服務器的配置中。 – LeviathanS17

0

如何使用IOUtils.copy()從Apache下議院IO包 - 這將輸入流複製到輸出流,並會在內部緩衝區,這樣你就不必。

response.setContentType("image/jpg"); 
OutputStream out = response.getOutputStream(); 
FileInputStream in = new FileInputStream(xzCrossUrl); 
IOUtils.copy(in, out); 

IOUtils.closeQuietly(in); 
IOUtils.closeQuietly(out); 

對於較大的文件,您可以使用IOUtils.copyLarge()

有關共享IO的詳細信息請參見http://commons.apache.org/proper/commons-io/

+0

謝謝你的小費,但這並沒有解決我的問題:(也許這個問題是不是在圖片加載 – LeviathanS17