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

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

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

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

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

    /**
    ?*?監視信息的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;
    ????
    ????
    /**?操作系統.?*/
    ????
    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;
    ????}

    }

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

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

    public?interface?IMonitorService?{
    ????
    /**
    ?????*?獲得當前的監控對象.
    ?????*?
    @return?返回構造好的監控對象
    ?????*?
    @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;

    /**
    ?*?獲取系統信息的業務邏輯實現類.
    ?*?
    @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;

    ????
    /**
    ?????*?獲得當前的監控對象.
    ?????*?
    @return?返回構造好的監控對象
    ?????*?
    @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();

    ????????
    //?操作系統
    ????????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(
    "操作系統="?+?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對漢字處理存在問題(把一個漢字視為一個字節),因此在
    ?????*?包含漢字的字符串時存在隱患,現調整如下:
    ?????*?
    @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 閱讀(228) 評論(0)  編輯  收藏 所屬分類: J2SE

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

    導航

    統計

    常用鏈接

    留言簿(2)

    隨筆分類(16)

    隨筆檔案(16)

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费黄色小视频网站| 久久亚洲国产精品一区二区| 日本一区二区三区免费高清在线| 亚洲精品国产福利一二区| 国产精品区免费视频| 亚洲无吗在线视频| 亚洲小说区图片区另类春色| 最近中文字幕2019高清免费| 亚洲狠狠婷婷综合久久| 亚洲人成色777777在线观看 | 免费下载成人电影| 男女啪啪免费体验区| 亚洲毛片无码专区亚洲乱| 亚洲欧洲精品成人久久奇米网 | 美女黄频免费网站| 亚洲精品高清国产一久久| 国产片免费在线观看| 99热这里只有精品6免费| 国产精品成人亚洲| 亚洲国产成人精品久久| 国产亚洲一区二区三区在线不卡 | 亚洲精品中文字幕无乱码| 国产一级淫片a免费播放口之| 免费观看91视频| 免费无码午夜福利片| 亚洲偷偷自拍高清| 亚洲激情视频在线观看| 成人亚洲综合天堂| 成人女人A级毛片免费软件| 久久久久久影院久久久久免费精品国产小说 | 久久久久久亚洲精品| 亚洲第一成人影院| 毛片a级三毛片免费播放| 毛片在线播放免费观看| 九一在线完整视频免费观看| 亚洲熟妇AV乱码在线观看| 亚洲美女免费视频| 久久久久久亚洲av成人无码国产| 亚洲午夜精品一级在线播放放| 免费无码成人AV片在线在线播放| 99久久国产热无码精品免费|