亚洲中文日韩国产一区|亚洲国产精品原创巨作AV无遮挡|色依依国内精品中文字幕|日韩精品免费在线视频

<button id="lyzxa"><option id="lyzxa"><em id="lyzxa"></em></option></button>

    Tomcat內存溢出分析及解決方法

    時間:2022-10-30 21:32:22 解決方法 我要投稿
    • 相關推薦

    Tomcat內存溢出分析及解決方法

      JVM管理兩種類型的內存,堆和非堆。堆是給開發(fā)人員用的上面說的就是,是在JVM啟動時創(chuàng)建;非堆是留給JVM自己用的,用來存放類的信息的。它和堆不同,運行期內GC不會釋放空間。

      一、內存溢出類型

      1、java.lang.OutOfMemoryError: PermGen space

      JVM管理兩種類型的內存,堆和非堆。堆是給開發(fā)人員用的上面說的就是,是在JVM啟動時創(chuàng)建;非堆是留給JVM自己用的,用來存放類的信息的。它和堆不同,運行期內GC不會釋放空間。如果web app用了大量的第三方jar或者應用有太多的class文件而恰好MaxPermSize設置較小,超出了也會導致這塊內存的占用過多造成溢出,或者tomcat熱部署時侯不會清理前面加載的環(huán)境,只會將context更改為新部署的,非堆存的內容就會越來越多。

      PermGen space的全稱是Permanent Generation space,是指內存的永久保存區(qū)域,這塊內存主要是被JVM存放Class和Meta信息的,Class在被Loader時就會被放到PermGen space中,它和存放類實例(Instance)的Heap區(qū)域不同,GC(Garbage Collection)不會在主程序運行期對PermGen space進行清理,所以如果你的應用中有很CLASS的話,就很可能出現(xiàn)PermGen space錯誤,這種錯誤常見在web服務器對JSP進行pre compile的時候。如果你的WEB APP下都用了大量的第三方jar, 其大小超過了jvm默認的大小(4M)那么就會產生此錯誤信息了。

      一個最佳的配置例子:(經過本人驗證,自從用此配置之后,再未出現(xiàn)過tomcat死掉的情況)

      set JAVA_OPTS=-Xms800m -Xmx800m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m

      在linux下 在tomcathome/conf/catalina.sh中加上如標紅所示的一句代碼:可以增加tomcat jvm 的內存,這樣就不容易出現(xiàn)內存溢出的現(xiàn)象了!

      # ----- Execute The Requested Command -----------------------------------------

      JAVA_OPTS="-server -Xms512m -Xmx2048m -XX:PermSize=128m -XX:MaxNewSize=256m -XX:MaxPermSize=256m"

      # Bugzilla 37848: only output this if we have a TTY

      2、java.lang.OutOfMemoryError: Javaheap space

      第一種情況是個補充,主要存在問題就是出現(xiàn)在這個情況中。其默認空間(即-Xms)是物理內存的1/64,最大空間(-Xmx)是物理內存的1/4。如果內存剩余不到40%,JVM就會增大堆到Xmx設置的值,內存剩余超過70%,JVM就會減小堆到Xms設置的值。所以服務器的Xmx和Xms設置一般應該設置相同避免每次GC后都要調整虛擬機堆的大小。假設物理內存無限大,那么JVM內存的最大值跟操作系統(tǒng)有關,一般32位機是1.5g到3g之間,而64位的就不會有限制了。

      注意:如果Xms超過了Xmx值,或者堆最大值和非堆最大值的總和超過了物理內存或者操作系統(tǒng)的最大限制都會引起服務器啟動不起來。

      垃圾回收GC的角色

      JVM調用GC的頻度還是很高的,主要兩種情況下進行垃圾回收:

      當應用程序線程空閑;另一個是java內存堆不足時,會不斷調用GC,若連續(xù)回收都解決不了內存堆不足的問題時,就會報out of memory錯誤。因為這個異常根據系統(tǒng)運行環(huán)境決定,所以無法預期它何時出現(xiàn)。

      根據GC的機制,程序的運行會引起系統(tǒng)運行環(huán)境的變化,增加GC的觸發(fā)機會。

      為了避免這些問題,程序的設計和編寫就應避免垃圾對象的內存占用和GC的開銷。顯示調用System.GC()只能建議JVM需要在內存中對垃圾對象進行回收,但不是必須馬上回收,

      一個是并不能解決內存資源耗空的局面,另外也會增加GC的消耗。

      二、JVM內存區(qū)域組成

      簡單的說java中的堆和棧

      java把內存分兩種:一種是棧內存,另一種是堆內存

      1、在函數中定義的基本類型變量和對象的引用變量都在函數的棧內存中分配;

      2、堆內存用來存放由new創(chuàng)建的對象和數組

      在函數(代碼塊)中定義一個變量時,java就在棧中為這個變量分配內存空間,當超過變量的作用域后,java會自動釋放掉為該變量所分配的內存空間;在堆中分配的內存由java虛擬機的自動垃圾回收器來管理

      堆的優(yōu)勢是可以動態(tài)分配內存大小,生存期也不必事先告訴編譯器,因為它是在運行時動態(tài)分配內存的。缺點就是要在運行時動態(tài)分配內存,存取速度較慢;

      棧的優(yōu)勢是存取速度比堆要快,缺點是存在棧中的數據大小與生存期必須是確定的無靈活性。

      java堆分為三個區(qū):New、Old和Permanent

      GC有兩個線程:

      新創(chuàng)建的對象被分配到New區(qū),當該區(qū)被填滿時會被GC輔助線程移到Old區(qū),當Old區(qū)也填滿了會觸發(fā)GC主線程遍歷堆內存里的所有對象。Old區(qū)的大小等于Xmx減去-Xmn

      java棧存放

      棧調整:參數有+UseDefaultStackSize -Xss256K,表示每個線程可申請256k的?臻g

      每個線程都有他自己的Stack

      三、JVM如何設置虛擬內存

      提示:在JVM中如果98%的時間是用于GC且可用的Heap size 不足2%的時候將拋出此異常信息。

      提示:Heap Size 最大不要超過可用物理內存的80%,一般的要將-Xms和-Xmx選項設置為相同,而-Xmn為1/4的-Xmx值。

      提示:JVM初始分配的內存由-Xms指定,默認是物理內存的1/64;JVM最大分配的內存由-Xmx指定,默認是物理內存的1/4。

      默認空余堆內存小于40%時,JVM就會增大堆直到-Xmx的最大限制;空余堆內存大于70%時,JVM會減少堆直到-Xms的最小限制。因此服務器一般設置-Xms、-Xmx相等以避免在每次GC 后調整堆的大小。

      提示:假設物理內存無限大的話,JVM內存的最大值跟操作系統(tǒng)有很大的關系。

      簡單的說就32位處理器雖然可控內存空間有4GB,但是具體的操作系統(tǒng)會給一個限制,

      這個限制一般是2GB-3GB(一般來說Windows系統(tǒng)下為1.5G-2G,Linux系統(tǒng)下為2G-3G),而64bit以上的處理器就不會有限制了

      注意:如果Xms超過了Xmx值,或者堆最大值和非堆最大值的總和超過了物理內存或者操作系統(tǒng)的最大限制都會引起服務器啟動不起來。

      提示:設置NewSize、MaxNewSize相等,"new"的大小最好不要大于"old"的一半,原因是old區(qū)如果不夠大會頻繁的觸發(fā)"主" GC ,大大降低了性能

      JVM使用-XX:PermSize設置非堆內存初始值,默認是物理內存的1/64;

      由XX:MaxPermSize設置最大非堆內存的大小,默認是物理內存的1/4。

      解決方法:手動設置Heap size

      修改TOMCAT_HOME/bin/catalina.bat

      在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:

      JAVA_OPTS="-server -Xms800m -Xmx800m -XX:MaxNewSize=256m"

    【Tomcat內存溢出分析及解決方法】相關文章:

    電腦提示內存溢出是什么意思02-18

    關于table表格中的內容溢出布局的解決方法11-18

    內存常見故障的解決方法03-11

    nokia內存不足的解決方法11-18

    手機內存卡故障及解決方法11-25

    電腦內存條問題分析論文11-24

    win10內存占用過高的解決方法03-31

    關于夏天內存發(fā)熱過高的解決方法04-20

    內存條松動導致的故障現(xiàn)象及解決方法11-25

    臺式機內存常見故障及解決方法11-25