問題表現(xiàn):
當(dāng)用戶執(zhí)行一個(gè)大數(shù)據(jù)的應(yīng)用時(shí)(凈字節(jié)碼量約為5M)時(shí),系統(tǒng)會(huì)提示出錯(cuò):
前臺(tái)錯(cuò)誤為:HTTP Status 500-Dispatch[EAITool] to method listCurTree retrun an
exception
(以下省略)
………………………………………………………
………………………………………………………
后臺(tái)錯(cuò)誤為:java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start(Native Method)
at org.apache.catalina.loader.WebappLoader.notifyContext(WebappLoader.ja
va:847)
(以下省略)
………………………………………………………
………………………………………………………
問題分析:
由于TOMCAT內(nèi)存溢出而引發(fā)的問題,主要原因是JVM的虛擬內(nèi)存默認(rèn)為128M,當(dāng)超過這個(gè)值時(shí)就把先前占用的內(nèi)存釋放,而導(dǎo)致好象TCP/IP丟包的假象,出現(xiàn)HTTP500的錯(cuò)誤。
解決方法主要是加大TOMCAT可利用內(nèi)存,并在程序當(dāng)中加大內(nèi)存使用。
解決方法:
方法:加大TOMCAT可利用內(nèi)存:
在TOMCAT的目錄下,也就是在TOMCAT41/bin/catalina.bat文件最前面加入
set
JAVA_OPTS=-Xms800m -Xmx800m
表現(xiàn)效果是當(dāng)你啟動(dòng)TOMCAT時(shí),系統(tǒng)內(nèi)存會(huì)增加近800M使用
操作方法:
1)、先關(guān)掉WINDOWS服務(wù)當(dāng)中的TOMCAT4服務(wù)。
2)、再找到TOMCAT/BIN目錄下startup.bat,雙擊打開它,你會(huì)發(fā)現(xiàn)現(xiàn)WINDOWS內(nèi)存占用會(huì)增加近800M。
3)、執(zhí)行程序,因?yàn)槭?/span>TOMCAT重新編譯程序,所以第一次會(huì)比較慢。
結(jié)論:
經(jīng)過測試,我們得出如下數(shù)據(jù):
當(dāng)系統(tǒng)傳輸約2000條數(shù)據(jù)時(shí),大約近12M的凈數(shù)據(jù)(不壓縮時(shí)),系統(tǒng)輔助運(yùn)行的內(nèi)存大約占用150M左右的空間,也就是近200M的內(nèi)存占用,而我們擴(kuò)大了近800M的JAVA內(nèi)存使用,這對(duì)于業(yè)務(wù)本身來說是足夠了。所以你們不用擔(dān)心大數(shù)據(jù)量的傳遞問題。
基于JAVA虛擬機(jī)的原理,JAVA自動(dòng)有垃圾回收機(jī)制,也就是在你對(duì)一些內(nèi)存長時(shí)間不使用時(shí)(近2分鐘,取決于使用頻度和優(yōu)先級(jí)等),就會(huì)自動(dòng)垃圾回收,從而釋放不用的內(nèi)存占用。