看到這個訊息就是要加大記憶體空間啦,java 程式有 -xms 跟 -xmx 參數可以用,Tomcat 到了 5.0.21 之後有畫面可以設定。
就是最下面那三行,一般只要設定 Initial memory pool (初始值) 跟 Maximum memory pool (最大值) 就可以了。
但是解決Out Of Memory Error 問題之前,一定要先了解狀況發生的原因。
一般都是發生在開啟大型檔案或跟資料庫一次拿了太多的資料,造成 Out Of Memory Error 的狀況,這時就大概要計算一下資料量的最大值是多少,並且設定所需最小及最大的記憶體空間值。
另一種狀況平時比較難查覺。就是 Servlet 或 JSP 的 Container 突然同時上線人數爆增,也相對造成記憶體需求不足,所以也必須要計算出程式所需的資料量*同時上線人數,來設定記憶體的需求量。(如果要有最佳化的值,最好是配合 gc 做調校)
有一種說法是聽來的,實際上是不是如此還有待確認。
當 CPU 速度愈快,記憶體的最小需求量也就必需愈大。原因是 CPU 愈快,短時間內能處理的資料量也就愈大,所以在 java 做 GC 之前,可能已經記憶體已經消耗完了,所以 CPU 的速度也是記憶體初始需求量的重要因素之一。
目前這三項應該足以應付絕大部份 Out Of Memory Error 的狀況,其它造成 Out Of Memory Error 的狀況,等有遇到再來補充。
8 comments On [Java] java.lang.OutOfMemoryError 的解決方法
寫得很詳細,請問如果我有4G Memory,也有很大的SQL訪問量 最大的Memory 值大約要設多少?1024M是適當的嗎?
不知道如何打开上述畫面。请指教!
John:
適當的量只要觀察 MySQL 執行所佔的記憶體應該就很容易評估的出來。
lingxue:
在右下角的 Tomcat 圖示點二下應該就能看到了。
谢谢你写的精彩文章
我也遇到这个问题,但我在RESIN中使用,请问下我应该在哪里设置呢??
谢谢!!
Resin 我很久沒用了,所以也不知道有沒有提供這種介面設定? 可以找一下設定檔應該會有,如果沒有的話自己手動下 -xms 跟 -xmx 就可以了。
找不到发生Out Of Memory Error 的原因
数据量很大的时候 没有办法调试啊
可是如果是突然发生的错误呢?
比如在日志里看到凌晨4点钟突然出现的outofmemory错误,因为是学校的管理系统,所以那个时间应该是绝对没有人访问的!
在没有任何预兆的情况下出现的这个错误,有谁碰到过没有啊?
請問在tomcat 4.X要如何設定Xms and Xmx?