<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sealyu

    --- 博客已遷移至: http://www.sealyu.com/blog

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks
    作者:Jason S.H.Chen

    上篇給大家介紹了SUN JVM的內(nèi)存管理機(jī)制。本篇主要講解與性能相關(guān)的JVM參數(shù),怎樣使用工具監(jiān)控JVM的內(nèi)存分配使用情況和怎樣調(diào)整JVM參數(shù)讓系統(tǒng)在特定硬件配置下達(dá)到最優(yōu)化的性能。
    通過上篇SUN JVM內(nèi)存管理機(jī)制的介紹,大家都知道了SUN JVM內(nèi)存分為永久存儲(chǔ)區(qū),伊甸園,幸存者1區(qū),幸存者2區(qū)和養(yǎng)老區(qū)等幾個(gè)區(qū)域。他們的作用以及垃圾回收處理過程在上篇也做了詳細(xì)介紹。下面我們就來看看和這些內(nèi)存分區(qū)相關(guān)的JVM參數(shù)。

    JVM相關(guān)參數(shù):
    參數(shù)名 參數(shù)說明
    -server 啟用能夠執(zhí)行優(yōu)化的編譯器, 顯著提高服務(wù)器的性能,但使用能夠執(zhí)行優(yōu)化的編譯器時(shí),服務(wù)器的預(yù)備時(shí)間將會(huì)較長。生產(chǎn)環(huán)境的服務(wù)器強(qiáng)烈推薦設(shè)置此參數(shù)。
    -Xss 單個(gè)線程堆棧大小值;JDK5.0以后每個(gè)線程堆棧大小為1M,以前每個(gè)線程堆棧大小為256K。在相同物理內(nèi)存下,減小這個(gè)值能生成更多的線程。但是操作系統(tǒng)對一個(gè)進(jìn)程內(nèi)的線程數(shù)還是有限制的,不能無限生成,經(jīng)驗(yàn)值在3000~5000左右。
    -XX:+UseParNewGC 可用來設(shè)置年輕代為并發(fā)收集【多CPU】,如果你的服務(wù)器有多個(gè)CPU,你可以開啟此參數(shù);開啟此參數(shù),多個(gè)CPU可并發(fā)進(jìn)行垃圾回收,可提高垃圾回收的 速度。此參數(shù)和+UseParallelGC,-XX:ParallelGCThreads搭配使用。
    +UseParallelGC 選擇垃圾收集器為并行收集器。此配置僅對年輕代有效。即上述配置下,年輕代使用并發(fā)收集,而年老代仍舊使用串行收集 。可提高系統(tǒng)的吞吐量。
    -XX:ParallelGCThreads 年輕代并行垃圾收集的前提下(對并發(fā)也有效果)的線程數(shù),增加并行度,即:同時(shí)多少個(gè)線程一起進(jìn)行垃圾回收。此值最好配置與處理器數(shù)目相等。

    永久存儲(chǔ)區(qū)相關(guān)參數(shù):
    參數(shù)名 參數(shù)說明
    -Xnoclassgc 每次永久存儲(chǔ)區(qū)滿了后一般GC算法在做擴(kuò)展分配內(nèi)存前都會(huì)觸發(fā)一次FULL GC,除非設(shè)置了-Xnoclassgc.
    -XX:PermSize 應(yīng)用服務(wù)器啟動(dòng)時(shí),永久存儲(chǔ)區(qū)的初始內(nèi)存大
    -XX:MaxPermSize 應(yīng)用運(yùn)行中,永久存儲(chǔ)區(qū)的極限值。為了不消耗擴(kuò)大JVM永久存儲(chǔ)區(qū)分配的開銷,將此參數(shù)和-XX:PermSize這個(gè)兩個(gè)值設(shè)為相等。

    堆空間相關(guān)參數(shù)
    參數(shù)名 參數(shù)說明
    -Xms 啟動(dòng)應(yīng)用時(shí),JVM堆空間的初始大小值。
    -Xmx 應(yīng)用運(yùn)行中,JVM堆空間的極限值。為了不消耗擴(kuò)大JVM堆控件分配的開銷,將此參數(shù)和-Xms這個(gè)兩個(gè)值設(shè)為相等,考慮到需要開線程,講此值設(shè)置為總內(nèi)存的80%.
    -Xmn 此參數(shù)硬性規(guī)定堆空間的新生代空間大小,推薦設(shè)為堆空間大小的1/4。

    上面所列的JVM參數(shù)關(guān)系到系統(tǒng)的性能,而其中-XX:PermSize,-XX:MaxPermSize,-Xms,-Xmx和-Xmn這5個(gè)參數(shù)更是直接關(guān)系到系統(tǒng)的性能,系統(tǒng)是否會(huì)出現(xiàn)內(nèi)存溢出。
    -XX:PermSize和-XX:MaxPermSize分別設(shè)置應(yīng)用服務(wù)器啟動(dòng)時(shí),永久存儲(chǔ)區(qū)的初始大小和極限大小;在生成環(huán)境中強(qiáng)烈推薦將 這個(gè)兩個(gè)值設(shè)置為相同的值,以避免分配永久存儲(chǔ)區(qū)的開銷,具體的值可取系統(tǒng)“疲勞測試”獲取到的永久存儲(chǔ)區(qū)的極限值;如果不進(jìn)行設(shè)置 -XX:MaxPermSize默認(rèn)值為64M,一般來說系統(tǒng)的類定義文件大小都會(huì)超過這個(gè)默認(rèn)值。
    -Xms和-Xmx分別是服務(wù)器啟動(dòng)時(shí),堆空間的初始大小和極限值。-Xms的默認(rèn)值是物理內(nèi)存的1/64但小于1G,-Xmx的默認(rèn)值是物理 內(nèi)存的1/4但小于1G.在生產(chǎn)環(huán)境中這些默認(rèn)值是肯定不能滿足我們的需要的。也就是你的服務(wù)器有8g的內(nèi)存,不對JVM參數(shù)進(jìn)行設(shè)置優(yōu)化,應(yīng)用服務(wù)器啟 動(dòng)時(shí)還是按默認(rèn)值來分配和約束JVM對內(nèi)存資源的使用,不會(huì)充分的利用所有的內(nèi)存資源。
    到此我們就不難理解上文提到的“我的服務(wù)器有8g內(nèi)存,系統(tǒng)也就100M左右,居然出現(xiàn)內(nèi)存溢出”這個(gè)“怪現(xiàn)象”了。在上文我曾提到“永久存儲(chǔ) 區(qū)溢出(java.lang.OutOfMemoryError: Java Permanent Space)”和“JVM堆空間溢出(java.lang.OutOfMemoryError: Java heap space)”這兩種溢出錯(cuò)誤。現(xiàn)在大家都知道答案了:“永久存儲(chǔ)區(qū)溢出(java.lang.OutOfMemoryError: Java Permanent Space)”乃是永久存儲(chǔ)區(qū)設(shè)置太小,不能滿足系統(tǒng)需要的大小,此時(shí)只需要調(diào)整-XX:PermSize和-XX:MaxPermSize這兩個(gè)參數(shù)即 可。“JVM堆空間溢出(java.lang.OutOfMemoryError: Java heap space)”錯(cuò)誤是JVM堆空間不足,此時(shí)只需要調(diào)整-Xms和-Xmx這兩個(gè)參數(shù)即可。
    到此我們知道了,當(dāng)系統(tǒng)出現(xiàn)內(nèi)存溢出時(shí),是哪些參數(shù)設(shè)置不合理需要調(diào)整。但我們怎么知道服務(wù)器啟動(dòng)時(shí),到底JVM內(nèi)存相關(guān)參數(shù)的值是多少呢。在 實(shí)踐中,經(jīng)常遇到對JVM參數(shù)進(jìn)行設(shè)置了,并且自己心里覺得應(yīng)該不會(huì)出現(xiàn)內(nèi)存溢出了;但不幸的是內(nèi)存溢出還是發(fā)生了。很多人百思不得其解,那我可以肯定地 告訴你,你設(shè)置的JVM參數(shù)并沒有起作用(本文咱不探討沒有起作用的原因)。不信我們就去看看,下面介紹如何使用SUN公司的內(nèi)存使用監(jiān)控工具 jvmstat.
    本文只介紹如何使用jvmstat查看內(nèi)存使用,不介紹其安裝配置。有興趣的讀者,可到SUN公司的官方網(wǎng)站下載一個(gè),他本身已經(jīng)帶有非常詳細(xì) 的安裝配置文檔了。這里假設(shè)你已經(jīng)在你的應(yīng)用服務(wù)器上配置好了jvmstat了。那我們就開始使用他來看看我們的服務(wù)器到底是有沒有按照我們設(shè)置的參數(shù)啟 動(dòng)。
    首先啟動(dòng)服務(wù)器,等服務(wù)器啟動(dòng)完。開啟DOS窗口(此例子是在windows下完成,linux下同樣),在dos窗口中輸入jps這個(gè)命令。如下圖



    窗口中會(huì)顯示所有JAVA應(yīng)用進(jìn)程列表,列表的第一列為應(yīng)用的進(jìn)程ID,第二列為應(yīng)用的名字。在列表中找到你的應(yīng)用服務(wù)器的進(jìn)程ID,比如我這里的應(yīng)用服務(wù)器進(jìn)程ID為1856.在命令行輸入visualgc 1856回車。進(jìn)入jvmstat的主界面,如下圖:



    上圖分別標(biāo)注了伊甸園,幸存者0區(qū),幸存者1區(qū),養(yǎng)老區(qū)和永久存儲(chǔ)區(qū)。圖上直觀的反應(yīng)出各存儲(chǔ)區(qū)的大小,已經(jīng)使用的大小,剩下的空間大小,并用數(shù) 字標(biāo)出了各區(qū)的大小;如果你這上面的數(shù)字和你設(shè)置的JVM參數(shù)相同的話,那么恭喜你,你設(shè)置的參數(shù)已經(jīng)起作用,如果和你設(shè)置的不一致的話,那么你設(shè)置的參 數(shù)沒有起作用(可能是服務(wù)器的啟動(dòng)方式?jīng)]有載入你的JVM參數(shù)設(shè)置。)
    在優(yōu)化服務(wù)器的時(shí)候,這個(gè)工具很有用,他占用資源少。可以隨應(yīng)用服務(wù)器一直保持開啟狀態(tài),如果系統(tǒng)發(fā)生內(nèi)粗溢出,可以一眼就看出是那個(gè)區(qū)發(fā)生了溢出。根據(jù)觀察結(jié)果進(jìn)行進(jìn)一步優(yōu)化。
    posted on 2009-12-21 09:06 seal 閱讀(339) 評論(0)  編輯  收藏 所屬分類: Java基礎(chǔ)
    主站蜘蛛池模板: 国产亚洲精品精品国产亚洲综合| 美女被暴羞羞免费视频| 亚洲欧洲日产国码高潮αv| 777成影片免费观看| 一级毛片a免费播放王色电影| 亚洲精品美女久久久久| 亚洲日韩国产精品乱| 四虎成人免费观看在线网址| 999久久久免费精品播放| 国产大片免费天天看| 亚洲日本在线电影| 亚洲精品国产第1页| 国产精品亚洲片在线| 亚洲精品美女久久久久99小说| 在线jlzzjlzz免费播放| 18女人水真多免费高清毛片| 国产午夜精品久久久久免费视 | 野花香在线视频免费观看大全| 污污免费在线观看| 亚洲精华国产精华精华液| 亚洲的天堂av无码| 亚洲精品高清视频| 亚洲AV无码一区东京热久久 | 亚洲久悠悠色悠在线播放| 亚洲天堂一区二区三区四区| 国产精品亚洲аv无码播放| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 亚洲日韩国产二区无码| 亚洲AV男人的天堂在线观看| 久久久久亚洲精品天堂| 亚洲国产精品婷婷久久| 亚洲va无码va在线va天堂| 亚洲午夜久久久久妓女影院| 亚洲乱码日产精品a级毛片久久| 又黄又爽无遮挡免费视频| 国产大片91精品免费观看男同| 妞干网免费视频在线观看| 岛国片在线免费观看| 国产成人精品男人免费| 国产乱色精品成人免费视频| 免费人成激情视频|