日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

(转)用Java获得当前性能信息

發布時間:2023/12/10 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (转)用Java获得当前性能信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(轉)用Java獲得當前性能信息 http://www.blogjava.net/amigoxie/archive/2008/04/30/197564.html
在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-05-02 07:03 jackyrong的世界 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/jackyrong/archive/2008/05/02/1179180.html

總結

以上是生活随笔為你收集整理的(转)用Java获得当前性能信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。