熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Tomcat運行Java Web內存溢出總結

2013-11-23 20:06:15  來源: Java開源技術 
    如果JVM裡運行的程序 它的內存堆和持久存儲區域的都滿了這個時候程序還想創建對象實例的話垃圾收集器就會啟動試圖釋放足夠的內存來創建這個對象這個時候如果垃圾收集器 沒有能力釋放出足夠的內存它就會拋出OutOfMemoryError內存溢出錯誤
   
    SUN JVM的內存管理方式
   
    SUN的JVM是類似人類家族也就是在一個地方創建對象在它長期占據空間之前給它多次死亡的機會SUN JVM會劃分為
   
    年輕的一代(Young generation)包括EDEN和個幸存者空間(出發地和目的地the From space and the To space)
   
    老一代(Old generation)
   
    永久的一代(Permanent generation)
   
    Java虛擬機的運行時數據區一般分類如下(不一定是物理劃分)
   
    主要存放對象實例線程共享
   
    主要存儲特定線程的方法調用狀態線程獨占
   
    本地方法棧存儲本地方法的調用狀態線程獨占
   
    PC寄存器學過操作系統課程的都知道線程獨占
   
    方法區主要存儲了類型信息線程共享
   
    因此在拋出內存溢出錯誤的時候一般都會提示內存洩露的種類一般也都是按照區域進行劃分
   
    堆(heap)內存洩漏javalangOutOfMemoryError: Javaheap space:大家都比較熟悉 通過設置Xmsm Xmxm可以解決
   
    棧(stack)內存洩漏當前線程運行期間維護的中間變量等信息過多例如常見的死循環引起stack over flow
   
    方法區(permanent heap)內存洩漏即javalangOutOfMemoryError: PermGen space:發生的原因和類型裝載類型卸載有直接的關系通過設置XX:MaxNewSize=m XX:MaxPermSize=m可以解決
   
    一般情況下當服務器內存過小而提供了大量的訪問服務時可能會緩存過多的數據對象造成堆內存溢出當web應用不斷擴大加載的lib庫達到一定大小(M)後就容易報PermGen OOM也就是方法區溢出
   
    在Linux服務器中將參數寫入環境變量
   
    export CATALINA_OPTS=Xmsm Xmxm export JAVA_OPTS=XX:MaxNewSize=m XX:MaxPermSize=m Xmx 最大不要超過服務器物理內存的%
From:http://tw.wingwit.com/Article/program/Java/ky/201311/27937.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.