内存溢出_关于PermGen Space内存溢出解决方案
內(nèi)存溢出分為Heap Space和PermGen Space兩種異常。正巧的是我這次就碰到了PermGen space異常,為了解決這個(gè)異常花了我 半天的時(shí)間,所以今天寫這個(gè)方案就是做一種筆記。
剛開始碰到這個(gè)內(nèi)存溢出的問(wèn)題的時(shí)候,我一直沒(méi)有去管他,因?yàn)殚_發(fā)時(shí)間緊我不得不放棄這些系統(tǒng)拋出的異常。
廢話不多說(shuō)了,先來(lái)看看這次內(nèi)存溢出到底是怎么一回事。
啟動(dòng)tomcat沒(méi)有問(wèn)題,并且還能夠訪問(wèn),但是當(dāng)你訪問(wèn)的頁(yè)面越來(lái)越多的時(shí)候,會(huì)突然間蹦出一個(gè)PermGen space內(nèi)存溢出的異常。其實(shí)這個(gè)問(wèn)題看起來(lái)是很簡(jiǎn)單的,只要修改一下永久域的大小就可以了。于是我的同事就發(fā)給我一段修改永久域大小的代碼:
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=128m"(Xms堆內(nèi)存初始值,Xmx堆內(nèi)存最大值,為什么Xms和Xmx要設(shè)置一樣大呢,因?yàn)槿绻阍O(shè)置Xms初始值和Xms不一樣,那么每次內(nèi)存增大的時(shí)候都需要重新分配內(nèi)存給堆,這樣的每次增大都會(huì)相應(yīng)的浪費(fèi)時(shí)間。所以干脆設(shè)置Xms和Xmx一樣。Xx:permsize是永久域的初始值,xx:maxpersize是最大分配的永久域空間,xx:maxnewsize是新域最大值)
把這段代碼放到tomcatbin目錄下的catalina.bat文件(Linux修改catalina.sh)的第一行就可以了。弄好之后以為ok了。結(jié)果,結(jié)果。。。。
還是報(bào)PermGen Space內(nèi)存溢出,我在想是不是空間還不夠大,于是把XX:PermSize設(shè)置512M,XX:MaxPermSize設(shè)置1024M。
滿懷信心的一式結(jié)果崩潰了,還是報(bào)內(nèi)存溢出,我還在想是不是內(nèi)存空間分配的不夠大啊,于是我又加大內(nèi)存,結(jié)果一次次的失敗。
于是我就在想到底是哪里需要分配這么大的內(nèi)存,于是我換了一條思路,我來(lái)找哪里消耗的內(nèi)存最大,于是找到一種工具就是jvm自帶的,打開cmd然后輸入jconsole,會(huì)彈出一個(gè)對(duì)話框,如圖:
我選擇遠(yuǎn)程進(jìn)程,如何來(lái)設(shè)置這個(gè)遠(yuǎn)程進(jìn)程連接呢:
打開Catalina.bat文件,然后找到rem -----Execute The Requested Command
在這個(gè)下面加入以下代碼:
set JAVA_OPTS= %JAVA_OPTS% -Djava.rmi.server.hostname=xxx.xx.xx.xx (ip)
set JAVA_OPTS= %JAVA_OPTS% -Dcom.sun.management.jmxremote.port=xxxx(端口)
set JAVA_OPTS= %JAVA_OPTS% -Dcom.sun.management.jmxremote.ssl=false
set JAVA_OPTS= %JAVA_OPTS% -Dcom.sun.management.jmxremote.authenticate=false(如果為true就需要賬號(hào)密碼,這里為false簡(jiǎn)單點(diǎn))
現(xiàn)在把ip和端口輸入jconsole里面進(jìn)行遠(yuǎn)程連接:
選擇“內(nèi)存”---“Ps Perm Gen”發(fā)現(xiàn)分配的內(nèi)存還是只有80多M,我不是已經(jīng)分配了2個(gè)G的內(nèi)存給permGen space嗎,為什么這里還是80多m呢。
猛然間想到是不是分配內(nèi)存的代碼錯(cuò)了
于是乎開始尋找新的內(nèi)存分配代碼這一次就有了下面這一段代碼:
set JAVA_OPTS=-Xms800m -Xmx800m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m
給永久域初始值分配128M,然后再用jconsole來(lái)查看,發(fā)現(xiàn)permGen space不報(bào)內(nèi)存溢出了。哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈啊哈哈哈哈哈哈啊
總結(jié)
以上是生活随笔為你收集整理的内存溢出_关于PermGen Space内存溢出解决方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 是什么包_包粽子教程,喜欢的收藏,以后想
- 下一篇: 获取当前周一日期_Excel工作表中最全