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

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

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

    (轉)Java獲得當前性能信息

    ??????在Java中,可以獲得總的物理內存、剩余的物理內存、已使用的物理內存等信息,本例講解如何取得這些信息,并且獲得在Windows下的內存使用率。
    ???? 首先編寫一個MonitorInfoBean類,用來裝載監(jiān)控的一些信息,包括物理內存、剩余的物理內存、已使用的物理內存、內存使用率等字段,該類的代碼如下:
    package?com.amigo.performance;

    /**
    ?*?監(jiān)視信息的JavaBean類.
    ?*?
    @author?<a?href="mailto:xiexingxing1121@126.com">AmigoXie</a>
    ?*?
    @version?1.0?
    ?*?Creation?date:?2008-4-25?-?上午10:37:00
    ?
    */

    public?class?MonitorInfoBean?{
    ????
    /**?可使用內存.?*/
    ????
    private?long?totalMemory;
    ????
    ????
    /**?剩余內存.?*/
    ????
    private?long?freeMemory;
    ????
    ????
    /**?最大可使用內存.?*/
    ????
    private?long?maxMemory;
    ????
    ????
    /**?操作系統(tǒng).?*/
    ????
    private?String?osName;
    ????
    ????
    /**?總的物理內存.?*/
    ????
    private?long?totalMemorySize;
    ????
    ????
    /**?剩余的物理內存.?*/
    ????
    private?long?freePhysicalMemorySize;
    ????
    ????
    /**?已使用的物理內存.?*/
    ????
    private?long?usedMemory;
    ????
    ????
    /**?線程總數.?*/
    ????
    private?int?totalThread;
    ????
    ????
    /**?cpu使用率.?*/
    ????
    private?double?cpuRatio;

    ????
    public?long?getFreeMemory()?{
    ????????
    return?freeMemory;
    ????}


    ????
    public?void?setFreeMemory(long?freeMemory)?{
    ????????
    this.freeMemory?=?freeMemory;
    ????}


    ????
    public?long?getFreePhysicalMemorySize()?{
    ????????
    return?freePhysicalMemorySize;
    ????}


    ????
    public?void?setFreePhysicalMemorySize(long?freePhysicalMemorySize)?{
    ????????
    this.freePhysicalMemorySize?=?freePhysicalMemorySize;
    ????}


    ????
    public?long?getMaxMemory()?{
    ????????
    return?maxMemory;
    ????}


    ????
    public?void?setMaxMemory(long?maxMemory)?{
    ????????
    this.maxMemory?=?maxMemory;
    ????}


    ????
    public?String?getOsName()?{
    ????????
    return?osName;
    ????}


    ????
    public?void?setOsName(String?osName)?{
    ????????
    this.osName?=?osName;
    ????}


    ????
    public?long?getTotalMemory()?{
    ????????
    return?totalMemory;
    ????}


    ????
    public?void?setTotalMemory(long?totalMemory)?{
    ????????
    this.totalMemory?=?totalMemory;
    ????}


    ????
    public?long?getTotalMemorySize()?{
    ????????
    return?totalMemorySize;
    ????}


    ????
    public?void?setTotalMemorySize(long?totalMemorySize)?{
    ????????
    this.totalMemorySize?=?totalMemorySize;
    ????}


    ????
    public?int?getTotalThread()?{
    ????????
    return?totalThread;
    ????}


    ????
    public?void?setTotalThread(int?totalThread)?{
    ????????
    this.totalThread?=?totalThread;
    ????}


    ????
    public?long?getUsedMemory()?{
    ????????
    return?usedMemory;
    ????}


    ????
    public?void?setUsedMemory(long?usedMemory)?{
    ????????
    this.usedMemory?=?usedMemory;
    ????}


    ????
    public?double?getCpuRatio()?{
    ????????
    return?cpuRatio;
    ????}


    ????
    public?void?setCpuRatio(double?cpuRatio)?{
    ????????
    this.cpuRatio?=?cpuRatio;
    ????}

    }

    ???? 接著編寫一個獲得當前的監(jiān)控信息的接口,該類的代碼如下所示:
    package?com.amigo.performance;

    /**
    ?*?獲取系統(tǒng)信息的業(yè)務邏輯類接口.
    ?*?
    @author?<a?href="mailto:xiexingxing1121@126.com">AmigoXie</a>
    ?*?
    @version?1.0?
    ?*?Creation?date:?2008-3-11?-?上午10:06:06
    ?
    */

    public?interface?IMonitorService?{
    ????
    /**
    ?????*?獲得當前的監(jiān)控對象.
    ?????*?
    @return?返回構造好的監(jiān)控對象
    ?????*?
    @throws?Exception
    ?????*?
    @author?<a?href="mailto:xiexingxing1121@126.com">AmigoXie</a>
    ?????*?Creation?date:?2008-4-25?-?上午10:45:08
    ?????
    */

    ????
    public?MonitorInfoBean?getMonitorInfoBean()?throws?Exception;

    }
    ???? 該類的實現類MonitorServiceImpl如下所示:
    package?com.amigo.performance;

    import?java.io.InputStreamReader;
    import?java.io.LineNumberReader;

    import?sun.management.ManagementFactory;

    import?com.sun.management.OperatingSystemMXBean;

    /**
    ?*?獲取系統(tǒng)信息的業(yè)務邏輯實現類.
    ?*?
    @author?<a?href="mailto:xiexingxing1121@126.com">AmigoXie</a>
    ?*?
    @version?1.0?Creation?date:?2008-3-11?-?上午10:06:06
    ?
    */

    public?class?MonitorServiceImpl?implements?IMonitorService?{
    ????
    ????
    private?static?final?int?CPUTIME?=?30;

    ????
    private?static?final?int?PERCENT?=?100;

    ????
    private?static?final?int?FAULTLENGTH?=?10;

    ????
    /**
    ?????*?獲得當前的監(jiān)控對象.
    ?????*?
    @return?返回構造好的監(jiān)控對象
    ?????*?
    @throws?Exception
    ?????*?
    @author?<a?href="mailto:xiexingxing1121@126.com">AmigoXie</a>
    ?????*?Creation?date:?2008-4-25?-?上午10:45:08
    ?????
    */

    ????
    public?MonitorInfoBean?getMonitorInfoBean()?throws?Exception?{
    ????????
    int?kb?=?1024;
    ????????
    ????????
    //?可使用內存
    ????????long?totalMemory?=?Runtime.getRuntime().totalMemory()?/?kb;
    ????????
    //?剩余內存
    ????????long?freeMemory?=?Runtime.getRuntime().freeMemory()?/?kb;
    ????????
    //?最大可使用內存
    ????????long?maxMemory?=?Runtime.getRuntime().maxMemory()?/?kb;

    ????????OperatingSystemMXBean?osmxb?
    =?(OperatingSystemMXBean)?ManagementFactory
    ????????????????.getOperatingSystemMXBean();

    ????????
    //?操作系統(tǒng)
    ????????String?osName?=?System.getProperty("os.name");
    ????????
    //?總的物理內存
    ????????long?totalMemorySize?=?osmxb.getTotalPhysicalMemorySize()?/?kb;
    ????????
    //?剩余的物理內存
    ????????long?freePhysicalMemorySize?=?osmxb.getFreePhysicalMemorySize()?/?kb;
    ????????
    //?已使用的物理內存
    ????????long?usedMemory?=?(osmxb.getTotalPhysicalMemorySize()?-?osmxb
    ????????????????.getFreePhysicalMemorySize())
    ????????????????
    /?kb;

    ????????
    //?獲得線程總數
    ????????ThreadGroup?parentThread;
    ????????
    for?(parentThread?=?Thread.currentThread().getThreadGroup();?parentThread
    ????????????????.getParent()?
    !=?null;?parentThread?=?parentThread.getParent())
    ????????????;
    ????????
    int?totalThread?=?parentThread.activeCount();

    ????????
    double?cpuRatio?=?0;
    ????????
    if?(osName.toLowerCase().startsWith("windows"))?{
    ????????????cpuRatio?
    =?this.getCpuRatioForWindows();
    ????????}

    ????????
    ????????
    //?構造返回對象
    ????????MonitorInfoBean?infoBean?=?new?MonitorInfoBean();
    ????????infoBean.setFreeMemory(freeMemory);
    ????????infoBean.setFreePhysicalMemorySize(freePhysicalMemorySize);
    ????????infoBean.setMaxMemory(maxMemory);
    ????????infoBean.setOsName(osName);
    ????????infoBean.setTotalMemory(totalMemory);
    ????????infoBean.setTotalMemorySize(totalMemorySize);
    ????????infoBean.setTotalThread(totalThread);
    ????????infoBean.setUsedMemory(usedMemory);
    ????????infoBean.setCpuRatio(cpuRatio);
    ????????
    return?infoBean;
    ????}


    ????
    /**
    ?????*?獲得CPU使用率.
    ?????*?
    @return?返回cpu使用率
    ?????*?
    @author?<a?href="mailto:xiexingxing1121@126.com">AmigoXie</a>
    ?????*?Creation?date:?2008-4-25?-?下午06:05:11
    ?????
    */

    ????
    private?double?getCpuRatioForWindows()?{
    ????????
    try?{
    ????????????String?procCmd?
    =?System.getenv("windir")
    ????????????????????
    +?"\\system32\\wbem\\wmic.exe?process?get?Caption,CommandLine,"
    ????????????????????
    +?"KernelModeTime,ReadOperationCount,ThreadCount,UserModeTime,WriteOperationCount";
    ????????????
    //?取進程信息
    ????????????long[]?c0?=?readCpu(Runtime.getRuntime().exec(procCmd));
    ????????????Thread.sleep(CPUTIME);
    ????????????
    long[]?c1?=?readCpu(Runtime.getRuntime().exec(procCmd));
    ????????????
    if?(c0?!=?null?&&?c1?!=?null)?{
    ????????????????
    long?idletime?=?c1[0]?-?c0[0];
    ????????????????
    long?busytime?=?c1[1]?-?c0[1];
    ????????????????
    return?Double.valueOf(
    ????????????????????????PERCENT?
    *?(busytime)?/?(busytime?+?idletime))
    ????????????????????????.doubleValue();
    ????????????}
    ?else?{
    ????????????????
    return?0.0;
    ????????????}

    ????????}
    ?catch?(Exception?ex)?{
    ????????????ex.printStackTrace();
    ????????????
    return?0.0;
    ????????}

    ????}


    ????
    /**
    ?????*?讀取CPU信息.
    ?????*?
    @param?proc
    ?????*?
    @return
    ?????*?
    @author?<a?href="mailto:xiexingxing1121@126.com">AmigoXie</a>
    ?????*?Creation?date:?2008-4-25?-?下午06:10:14
    ?????
    */

    ????
    private?long[]?readCpu(final?Process?proc)?{
    ????????
    long[]?retn?=?new?long[2];
    ????????
    try?{
    ????????????proc.getOutputStream().close();
    ????????????InputStreamReader?ir?
    =?new?InputStreamReader(proc.getInputStream());
    ????????????LineNumberReader?input?
    =?new?LineNumberReader(ir);
    ????????????String?line?
    =?input.readLine();
    ????????????
    if?(line?==?null?||?line.length()?<?FAULTLENGTH)?{
    ????????????????
    return?null;
    ????????????}

    ????????????
    int?capidx?=?line.indexOf("Caption");
    ????????????
    int?cmdidx?=?line.indexOf("CommandLine");
    ????????????
    int?rocidx?=?line.indexOf("ReadOperationCount");
    ????????????
    int?umtidx?=?line.indexOf("UserModeTime");
    ????????????
    int?kmtidx?=?line.indexOf("KernelModeTime");
    ????????????
    int?wocidx?=?line.indexOf("WriteOperationCount");
    ????????????
    long?idletime?=?0;
    ????????????
    long?kneltime?=?0;
    ????????????
    long?usertime?=?0;
    ????????????
    while?((line?=?input.readLine())?!=?null)?{
    ????????????????
    if?(line.length()?<?wocidx)?{
    ????????????????????
    continue;
    ????????????????}

    ????????????????
    //?字段出現順序:Caption,CommandLine,KernelModeTime,ReadOperationCount,
    ????????????????
    //?ThreadCount,UserModeTime,WriteOperation
    ????????????????String?caption?=?Bytes.substring(line,?capidx,?cmdidx?-?1)
    ????????????????????????.trim();
    ????????????????String?cmd?
    =?Bytes.substring(line,?cmdidx,?kmtidx?-?1).trim();
    ????????????????
    if?(cmd.indexOf("wmic.exe")?>=?0)?{
    ????????????????????
    continue;
    ????????????????}

    ????????????????
    //?log.info("line="+line);
    ????????????????if?(caption.equals("System?Idle?Process")
    ????????????????????????
    ||?caption.equals("System"))?{
    ????????????????????idletime?
    +=?Long.valueOf(
    ????????????????????????????Bytes.substring(line,?kmtidx,?rocidx?
    -?1).trim())
    ????????????????????????????.longValue();
    ????????????????????idletime?
    +=?Long.valueOf(
    ????????????????????????????Bytes.substring(line,?umtidx,?wocidx?
    -?1).trim())
    ????????????????????????????.longValue();
    ????????????????????
    continue;
    ????????????????}


    ????????????????kneltime?
    +=?Long.valueOf(
    ????????????????????????Bytes.substring(line,?kmtidx,?rocidx?
    -?1).trim())
    ????????????????????????.longValue();
    ????????????????usertime?
    +=?Long.valueOf(
    ????????????????????????Bytes.substring(line,?umtidx,?wocidx?
    -?1).trim())
    ????????????????????????.longValue();
    ????????????}

    ????????????retn[
    0]?=?idletime;
    ????????????retn[
    1]?=?kneltime?+?usertime;
    ????????????
    return?retn;
    ????????}
    ?catch?(Exception?ex)?{
    ????????????ex.printStackTrace();
    ????????}
    ?finally?{
    ????????????
    try?{
    ????????????????proc.getInputStream().close();
    ????????????}
    ?catch?(Exception?e)?{
    ????????????????e.printStackTrace();
    ????????????}

    ????????}

    ????????
    return?null;
    ????}

    ????
    ????
    /**
    ?????*?測試方法.
    ?????*?
    @param?args
    ?????*?
    @throws?Exception
    ?????*?
    @author?<a?href="mailto:xiexingxing1121@126.com">AmigoXie</a>
    ?????*?Creation?date:?2008-4-30?-?下午04:47:29
    ?????
    */

    ????
    public?static?void?main(String[]?args)?throws?Exception?{
    ????????IMonitorService?service?
    =?new?MonitorServiceImpl();
    ????????MonitorInfoBean?monitorInfo?
    =?service.getMonitorInfoBean();
    ????????System.out.println(
    "cpu占有率="?+?monitorInfo.getCpuRatio());
    ????????
    ????????System.out.println(
    "可使用內存="?+?monitorInfo.getTotalMemory());
    ????????System.out.println(
    "剩余內存="?+?monitorInfo.getFreeMemory());
    ????????System.out.println(
    "最大可使用內存="?+?monitorInfo.getMaxMemory());
    ????????
    ????????System.out.println(
    "操作系統(tǒng)="?+?monitorInfo.getOsName());
    ????????System.out.println(
    "總的物理內存="?+?monitorInfo.getTotalMemorySize()?+?"kb");
    ????????System.out.println(
    "剩余的物理內存="?+?monitorInfo.getFreeMemory()?+?"kb");
    ????????System.out.println(
    "已使用的物理內存="?+?monitorInfo.getUsedMemory()?+?"kb");
    ????????System.out.println(
    "線程總數="?+?monitorInfo.getTotalThread()?+?"kb");
    ????}

    }

    ??????? 該實現類中需要用到一個自己編寫byte的工具類,該類的代碼如下所示:
    package?com.amigo.performance;

    /**
    ?*?byte操作類.
    ?*?
    @author?<a?href="mailto:xiexingxing1121@126.com">AmigoXie</a>
    ?*?
    @version?1.0?
    ?*?Creation?date:?2008-4-30?-?下午04:57:23
    ?
    */

    public?class?Bytes?{
    ????
    /**
    ?????*?由于String.subString對漢字處理存在問題(把一個漢字視為一個字節(jié)),因此在
    ?????*?包含漢字的字符串時存在隱患,現調整如下:
    ?????*?
    @param?src?要截取的字符串
    ?????*?
    @param?start_idx?開始坐標(包括該坐標)
    ?????*?
    @param?end_idx???截止坐標(包括該坐標)
    ?????*?
    @return
    ?????
    */

    ????
    public?static?String?substring(String?src,?int?start_idx,?int?end_idx){
    ????????
    byte[]?b?=?src.getBytes();
    ????????String?tgt?
    =?"";
    ????????
    for(int?i=start_idx;?i<=end_idx;?i++){
    ????????????tgt?
    +=(char)b[i];
    ????????}

    ????????
    return?tgt;
    ????}

    }

    ??????? 運行下MonitorBeanImpl類,讀者將會看到當前的內存、cpu利用率等信息。

    posted on 2008-09-15 01:39 nonels 閱讀(235) 評論(0)  編輯  收藏 所屬分類: J2SE

    <2008年9月>
    31123456
    78910111213
    14151617181920
    21222324252627
    2829301234
    567891011

    導航

    統(tǒng)計

    常用鏈接

    留言簿(2)

    隨筆分類(16)

    隨筆檔案(16)

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: A国产一区二区免费入口| 日本免费一区二区三区最新| 特级aaaaaaaaa毛片免费视频| 亚洲综合日韩中文字幕v在线| 全黄a免费一级毛片人人爱| 国产精品免费精品自在线观看| aa级毛片毛片免费观看久| 亚洲成av人在线观看网站| 亚洲人成网站在线观看播放动漫| 国产亚洲免费的视频看| 亚洲国产人成中文幕一级二级| 免费无码黄十八禁网站在线观看| 日韩av无码久久精品免费| 中文字幕久无码免费久久| 美女被羞羞网站免费下载| 亚洲av最新在线观看网址| 久久狠狠爱亚洲综合影院| 亚洲视频免费观看| 亚洲国产女人aaa毛片在线| 激情综合色五月丁香六月亚洲| 亚洲成?v人片天堂网无码| 日日AV拍夜夜添久久免费| 好大好硬好爽免费视频| 成年女人看片免费视频播放器| 波多野结衣在线免费视频| 国产成人精品免费视| 四虎在线最新永久免费| 最近中文字幕国语免费完整| 99精品免费观看| 114级毛片免费观看| 91av在线免费视频| 麻花传媒剧在线mv免费观看 | 国产免费观看青青草原网站| 成年人性生活免费视频| 性一交一乱一视频免费看| 免费无码又爽又刺激毛片| 永久黄网站色视频免费| 国产无遮挡又黄又爽免费视频| 免费a级黄色毛片| 亚洲人成影院在线观看| 亚洲精品乱码久久久久久按摩|