<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;
    ????
    ????
    /**?線程總數(shù).?*/
    ????
    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;

    }
    ???? 該類的實現(xiàn)類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è)務邏輯實現(xiàn)類.
    ?*?
    @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;

    ????????
    //?獲得線程總數(shù)
    ????????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;
    ????????????????}

    ????????????????
    //?字段出現(xiàn)順序: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(
    "線程總數(shù)="?+?monitorInfo.getTotalThread()?+?"kb");
    ????}

    }

    ??????? 該實現(xiàn)類中需要用到一個自己編寫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é)),因此在
    ?????*?包含漢字的字符串時存在隱患,現(xiàn)調整如下:
    ?????*?
    @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 閱讀(229) 評論(0)  編輯  收藏 所屬分類: J2SE

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

    導航

    統(tǒng)計

    常用鏈接

    留言簿(2)

    隨筆分類(16)

    隨筆檔案(16)

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 97亚洲熟妇自偷自拍另类图片| 人禽杂交18禁网站免费| 在线成人精品国产区免费| 一级毛片高清免费播放| 一级免费黄色大片| 国产精品免费观看视频| 成全高清在线观看免费| 日韩免费视频一区二区| 久9这里精品免费视频| 69av免费观看| 国产又黄又爽又猛免费app| 日韩精品成人无码专区免费 | 亚洲欧洲日本国产| 亚洲国产日韩在线成人蜜芽| 亚洲性猛交xx乱| 亚洲综合精品伊人久久| 久久亚洲精品无码av| 新最免费影视大全在线播放| 久久一区二区免费播放| 久久午夜无码免费| 国产免费女女脚奴视频网| 免费黄色网址入口| 亚洲国产成人五月综合网| 亚洲人AV永久一区二区三区久久| 亚洲日韩精品射精日| 亚洲视频一区在线| 亚洲国产精品18久久久久久| 深夜A级毛片视频免费| 99麻豆久久久国产精品免费| 中文字幕视频免费| 四虎成人免费网址在线| 亚洲性在线看高清h片| 亚洲成AV人在线观看天堂无码| 亚洲第一精品电影网| 亚洲美国产亚洲AV| 国产精品综合专区中文字幕免费播放 | 亚洲午夜福利精品无码| 亚洲今日精彩视频| 亚洲性无码一区二区三区| 成人免费网站久久久| 性xxxxx大片免费视频|