qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          Tomcat運行Java Web內存溢出總結

           如果JVM里運行的程序, 它的內存堆和持久存儲區域的都滿了,這個時候程序還想創建對象實例的話,垃圾收集器就會啟動,試圖釋放足夠的內存來創建這個對象。這個時候如果垃圾收集器 沒有能力釋放出足夠的內存,它就會拋出OutOfMemoryError內存溢出錯誤。

            SUN JVM的內存管理方式:

            SUN的JVM是類似人類家族,也就是在一個地方創建對象,在它長期占據空間之前給它多次死亡的機會,SUN JVM會劃分為:

            1、年輕的一代(Young generation),包括EDEN和2個幸存者空間(出發地和目的地the From space and the To space)

            2、老一代(Old generation)

            3、永久的一代(Permanent generation)

            Java虛擬機的運行時數據區一般分類如下(不一定是物理劃分):

            1、堆:主要存放對象實例,線程共享

            2、棧:主要存儲特定線程的方法調用狀態,線程獨占

            3、本地方法棧:存儲本地方法的調用狀態,線程獨占

            4、PC寄存器:學過操作系統課程的都知道,線程獨占

            5、方法區:主要存儲了類型信息,線程共享

            因此,在拋出內存溢出錯誤的時候,一般都會提示內存泄露的種類,一般也都是按照區域進行劃分:

            1、堆(heap)內存泄漏java.lang.OutOfMemoryError: Javaheap space:大家都比較熟悉 ,通過設置-Xms2048m -Xmx4096m可以解決

            2、棧(stack)內存泄漏:當前線程運行期間維護的中間變量等信息過多,例如常見的死循環引起stack over flow

            3、方法區(permanent heap)內存泄漏,即java.lang.OutOfMemoryError: PermGen space:發生的原因和類型裝載、類型卸載有直接的關系,通過設置-XX:MaxNewSize=256m -XX:MaxPermSize=256m可以解決。

            一般情況下,當服務器內存過小,而提供了大量的訪問服務時,可能會緩存過多的數據對象造成堆內存溢出,當web應用不斷擴大,加載的lib庫達到一定大小(4M)后,就容易報PermGen OOM,也就是方法區溢出。

            在Linux服務器中將參數寫入環境變量:

        1. export CATALINA_OPTS="-Xms2048m -Xmx4096m" 
        2. export JAVA_OPTS="-XX:MaxNewSize=256m -XX:MaxPermSize=256m"
        3.   Xmx 最大不要超過服務器物理內存的80%

          posted on 2011-12-19 17:15 順其自然EVO 閱讀(165) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          <2011年12月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宜州市| 景泰县| 余干县| 西和县| 平舆县| 莲花县| 文安县| 赫章县| 岳阳县| 凤冈县| 长宁区| 开平市| 思茅市| 娄烦县| 霍州市| 杭州市| 武夷山市| 新龙县| 阳西县| 绵阳市| 桑植县| 瑞昌市| 库伦旗| 临洮县| 万年县| 张掖市| 遂溪县| 桃园市| 宾阳县| 平遥县| 安塞县| 弋阳县| 丹巴县| 阿鲁科尔沁旗| 河池市| 怀柔区| 蓬安县| 西吉县| 娄烦县| 密山市| 招远市|