在將大文件寫入servletOutputStream時,出現java.lang.outOfMemoryError異常。 默認情況下,每個響應都使用ehcache.constructs.web.filter Object進行包裝,以進行GZIP壓縮。根據日誌,在Filter對象中拋出異常。 有沒有辦法增加可用內存,這樣outOfMemoryError異常不會發生?過濾器中的Java OutOfMemory錯誤
回答
您需要選擇「-Xmx1024m」添加到它運行你的servlet CONTA的java
命令核能研究所。 (用任何你喜歡的堆大小代替1024m;這意味着1024兆字節)。如果你使用的是Tomcat,那麼這意味着你在環境變量CATALINA_OPTS中設置它。你的服務器配置會有所不同
但是,問題是在內存中緩衝這樣一個大文件。這是浪費。試試這個壓縮過濾器,它不緩衝這樣:
該文件大小爲17MB。它應該引起問題嗎? 我正在使用JBOSS服務器。 – 2010-03-19 10:00:29
我可以想象,在所有中間數據結構中取50 + MB的堆。而且,如果你的堆剩下大約64MB的默認值,是的,這是一個問題。 雖然你可以使堆更大,但我真的認爲最好使用不需要將文件加載到內存中的過濾器。這不應該是必要的,上面的過濾器不這樣做。 – 2010-03-19 11:20:28
使用-Xmx Java的如下圖所示
java -Xms256m -Xmx512m com.test.MyMain
X毫秒命令行選項代表內存分配的下端與XMX代表內存分配的上端
設置以下JVM選項,你的servlet容器-Xmx256m -Xms128m
(Tomcat中它是catalina.sh
/catalina.bat
)
不要忘記可能需要增加你的PermGen大小:
-XX:PermSize=64m -XX:MaxPermSize=256m
也不要請確保您高效地流出文件。輸出或輸入流管道中可能會有不必要的大緩衝。
數據庫返回了大約24k(相當寬)的行,我將其寫入servLet輸出流。因此,存儲器中存儲了大量的數據。 你知道一種改進方法嗎?我需要將所有提取的數據發送到web客戶端,只需一個響應。因此我不認爲我可以從數據庫中獲取數據。 – 2010-03-22 06:32:22
- 1. HBase OutOfMemory錯誤
- 2. OutOfMemory錯誤android
- 3. 嵌套過濾器中的query_string過濾器會引發錯誤
- 4. OutOfMemory錯誤Android
- 5. Javafx outofmemory錯誤
- 6. Android中的OutofMemory錯誤
- 7. ArrayList中的OutOfMemory錯誤。 Android
- 8. Android中的SimpleXML OutOfMemory錯誤
- 9. Servlet過濾器中的錯誤
- 10. GridView過濾器中的IndexOutOfBoundsException錯誤
- 11. 高級過濾器錯誤
- 12. VBA過濾器錯誤
- 13. Angularjs過濾器錯誤
- 14. 錯誤:意圖過濾器
- 15. Grails Tomcat OutofMemory錯誤
- 16. Java 8:OutOfMemory錯誤,更改MaxPermSize?
- 17. java「OutOfMemory錯誤」Jena應用程序
- 18. Java 8字符串outofmemory錯誤
- 19. tomcat7過濾器使用了錯誤的過濾器類路徑
- 20. JavaCPP BytePointer OutOfMemory錯誤
- 21. Cassandra終止OutOfMemory(OOM)錯誤
- 22. OutOfMemory錯誤在GridView的
- 23. 抑制Firefox錯誤控制檯中的「過濾器」錯誤?
- 24. Java過濾器錯誤的調度員解釋
- 25. AngularJS錯誤:[$ rootScope:infdig]引起的過濾器
- 26. $ rootScope:過濾器引起的infdig錯誤?
- 27. 帶範圍過濾器的錯誤
- 28. 添加WordPress的過濾器錯誤
- 29. CustomListView與位圖 - OutOfMemory錯誤
- 30. Apache Camel:DSL(Groovy或Java)中的嵌套過濾器(過濾器...過濾器...結束...過濾器...結束..end)
你使用的是tomcat嗎? – Bozho 2010-03-19 14:03:00