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

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

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

    隨筆 - 1, 文章 - 0, 評論 - 4, 引用 - 0
    數據加載中……

    【討論】關于Java性能監控的一些記錄

        本篇所有內容都是基于JDK5,如使用JDK6會有差別。
        在前些日子,我們做了一些性能監控的工作,有一些值得記錄的地方:
        JDK自身提供了很多工具,基于命令行和GUI的都有,學會合理應用它們是很有用處的。
        首先是jmap,這是一個命令行程序,用來查看JVM中對象數量情況,直接輸入jmap會顯示用法,下面是兩個常用的功能:
    jmap -histo 'jvmPid' > memory.txt
       
        其中jvmPid為當前虛擬機進程的系統ID號,等待過后,memory.txt會按空間占用由大到小的順序保存當前虛擬機運行中存在的對象類型,我們可以由此看出哪些類型對象占的空間和生成的數目較多,尤其是在自定義對象出現問題導致不能及時回收,這個功能是很有用的。
    jmap -heap:format='jvmPid'

        和上面的不同,上面是生成一個文本文件,而這里會生成一個二進制快照文件,可以用相應的分析軟件來打開它來進行功能更全面的檢測,如Eclipse Memory Analyzer。
        需要注意的是,上面的導出快照命令,在1G左右JVM內存的情況下,要大概等待1分鐘左右的時間,且執行時會使JVM暫停執行,因此不要在正式運行系統的高峰期或關鍵時刻使用。
        接下來是jstat,這也是一個命令行程序,用來查看JVM的各個內存和GC的使用情況,用法和參數非常多,有兩個我們用到的功能:
    jstat -gcutil 'jvmPid'

        會顯示此刻GC的情況,其中YGC和FGC代表小GC和大GC的次數,YGCT和FGCT則代表小GC和大GC運行的占用時間,正常情況下,大GC的次數應遠遠小于小GC,例如我當前的系統小GC已經有10w次,而大GC只有50次,這是程序設計運行良好的表現。
    jstat -gccapacity 'jvmPid'

        會顯示此刻GC各內存池占用量,和上條命令結果結構類似,同時也有一個問題,顯示的數據不是很直觀,如果通過GUI觀看就好多了。

        JVM自帶了GUI監控狀態的功能,在JDK5中,我們需要做一些配置手動開啟它,首先我們要在JVM啟動項增加一些屬性,假設我們的系統是一個運行在tomcat容器下的項目,我們就可以修改JAVA_OPTS變量來開啟監控服務
    JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false"

        這將開啟遠程基于jmx監控的服務功能,這樣的配置方式,同時也開啟了默認的身份驗證機制,我們還需要在另外的地方設置權限,用戶名和密碼才能登錄,我們先把這些服務端剩下的工作擱置一旁,先說說客戶端的部分。

        我們需要GUI客戶端訪問工具來遠程查看該虛擬機的信息,JDK5自帶了一個名為jconsole的客戶端,可以在JDK目錄的bin文件夾下找到它并可以直接雙擊運行,點擊“遠程”標簽,之后輸入遠程IP,端口,用戶名和密碼,如服務端配置正常,即可成功訪問。

        回到服務端上來,我們還需要配置JVM的遠程用戶名和密碼,這個要修改$JAVA_HOME/jre/lib/management/jmxremote.access和jmxremote.password.template文件。

        首先直接修改jmxremote.access文件,取消最后兩個用戶名的注釋,改為
    monitorRole   readonly
    controlRole   readwrite \
                  create javax.management.monitor.
    *,javax.management.timer.* \
                  unregister

        這兩個用戶的區別顯而易見,你取消一個當然也可以。
        然后修改jmxremote.password.template的文件名,將改成jmxremote.password,之后同樣編輯最后兩行用戶,將密碼改成你想要的,很簡單吧。
        之后還要做一步,將jmxremote.password文件的權限改為可讀可寫
    chmod 600 $JAVA_HOME/jre/lib/management/jmxremote.password

        至此,還有最后一點需要注意,要將/etc/hosts文件中127.0.0.1修改成你真正的外網IP,如210.209.83.37,并且運行 hostname -i命令返回的IP也應該是210.209.83.37才可以,每次修改完上述文件,要重新啟動JVM,監控服務才會生效。
        大功告成,開啟JVM以后,我們可以運行jconsole客戶端,輸入IP端口,用戶名和密碼,用戶名為monitorRole或controlRole或你自定義的(權限不同)。
        也可以免去用戶驗證部分,只需要再加入-Dcom.sun.management.jmxremote.authenticate=false即可,也可以通過修改com.sun.management.jmxremote.password.file和 com.sun.management.jmxremote.access.file自定義權限文件和密碼文件的位置,不過這也沒有什么太大必要。
        成功登錄后,因為是GUI界面,所有信息可以很直觀的被我們所學習和接受,但還需要我們具備一些JVM的知識,尤其是GC方面,有機會的話,會在以后的文檔中繼續說明。

        PS:打個小廣告,公司正在做OA項目,急缺人手,如果兄弟們誰有意向,發簡歷(huangcai36@163.com)給我。水平可以培養,但人要踏實!

    posted on 2011-03-10 12:44 黃小彩 閱讀(1803) 評論(4)  編輯  收藏

    評論

    # re: 【討論】關于Java性能監控的一些記錄[未登錄]  回復  更多評論   

    好文~收藏~
    2011-03-10 19:00 | Bomber

    # re: 【討論】關于Java性能監控的一些記錄[未登錄]  回復  更多評論   

    我們的OA快要上線了~~~
    2011-03-14 12:45 | dd

    # re: 【討論】關于Java性能監控的一些記錄  回復  更多評論   

    不知貴公司的工作地點是哪里?
    2011-03-19 13:18 | apl

    # re: 【討論】關于Java性能監控的一些記錄  回復  更多評論   

    @apl
    工作地點在廈門,在上海及廣州有分公司,如果您有意向,可以投一下簡歷。
    2011-03-22 16:56 | 黃小彩

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


    網站導航:
     
    主站蜘蛛池模板: 香蕉视频在线观看免费| 亚洲爆乳精品无码一区二区| 香蕉免费一级视频在线观看| 无码欧精品亚洲日韩一区夜夜嗨 | 亚洲国产成人久久精品99| 亚洲av日韩aⅴ无码色老头| 日韩高清免费在线观看| 国产精品亚洲专区在线播放| 免费在线观看日韩| 一个人免费观看www视频| 亚洲av无码不卡一区二区三区| 久久国产色AV免费观看| 亚洲视频在线观看2018| 免费视频淫片aa毛片| 一级毛片在线免费视频| 亚洲国产成人片在线观看| 99精品国产成人a∨免费看| 亚洲精品亚洲人成在线播放| 日本免费一本天堂在线| 巨胸喷奶水www永久免费| 亚洲午夜精品久久久久久人妖| 波多野结衣免费在线观看| 亚洲AV无码成人网站在线观看| 亚洲中文字幕无码一区| 亚洲免费闲人蜜桃| 黄页网址大全免费观看12网站| 亚洲AV无码乱码在线观看裸奔| 曰批视频免费30分钟成人| 亚洲av日韩精品久久久久久a| 国产亚洲成AV人片在线观黄桃| 九九精品免费视频| 一区二区三区在线观看免费| 亚洲综合色一区二区三区小说| 国产成人啪精品视频免费网| 男人进去女人爽免费视频国产 | 一个人在线观看视频免费| 日韩在线观看免费| 亚洲国色天香视频| 亚洲人成色7777在线观看不卡| 国产成人精品免费午夜app| 日韩久久无码免费毛片软件|