假如这个世界上只剩下你一个人,当你正坐在屋子里的时候,这时突然响起了敲门声...
用Java获得当前性能信息
查看( 87 ) /
评论( 10 )
在Java中,可以获得总的物理内存、剩余的物理内存、已使用的物理内存等信息,本例讲解如何取得这些信息,并且获得在Windows下的内存使用率。ITPUB个人空间.@)a+i\'U$j u%w*V,j
首先编写一个MonitorInfoBean类,用来装载监控的一些信息,包括物理内存、剩余的物理内存、已使用的物理内存、内存使用率等字段,该类的代码如下:
~|4um F(a0 package com.amigo.performance;ITPUB个人空间p&|}XZh2G,Y
)t)G(A e;~,R^%G$h0 /** *//**ITPUB个人空间6u#s(x3sl1D/VMxC
* 监视信息的JavaBean类.ITPUB个人空间Yq9oM*N} A
* @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>
\N1A9`/J_0 * @version 1.0 ITPUB个人空间yLx5I#P3M9[#?
* Creation date: 2008-4-25 - 上午10:37:00
-X;JB8Q-p7SS0 */
-}*NIY.~;Js0 public class MonitorInfoBean {
0V`e6X!qf:x&o0 /** *//** 可使用内存. */ITPUB个人空间3J*@1V/dC A0f6O.A t k"f%Z
private long totalMemory;
@)@@-[^kF0
eQ*@(Mm0 /** *//** 剩余内存. */
{o)H:u-@j r0 private long freeMemory;ITPUB个人空间$HLFS h)e,n;I
'y0ZY3q&K&t:Q0 /** *//** 最大可使用内存. */
L(oX@Z9W8N0 private long maxMemory;ITPUB个人空间!fO^cu H)G1x
ITPUB个人空间4x2T$EcaS
/** *//** 操作系统. */
qk md(Q8D0 private String osName;ITPUB个人空间LmJCjE k,g4\
ITPUB个人空间o*PK#n^C7z5T#o
/** *//** 总的物理内存. */ITPUB个人空间!Ps7R,VC$X
private long totalMemorySize;ITPUB个人空间!q3[:g)g;U d7`Q
ITPUB个人空间fLL,l1p9O$w
/** *//** 剩余的物理内存. */
ND6~@.L'T$t;\0e0 private long freePhysicalMemorySize;
!R%E!r1b;ReX1E@^F0 ITPUB个人空间6g*~nH)KR3}:S{'y
/** *//** 已使用的物理内存. */
{)fQx}9{ XK0 private long usedMemory;
SU$hE$`"K0
6Q*~q1f(D5a1{0 /** *//** 线程总数. */ITPUB个人空间9bf BkHg
private int totalThread;
[!mew#so7@0 ITPUB个人空间9?kq6U[eef
/** *//** cpu使用率. */ITPUB个人空间Y'[P` i.P
private double cpuRatio;
|^a)[8t+cZ0 ITPUB个人空间U%W*p*\ R~+Hu$W
public long getFreeMemory() {
Ym5|g%qG0 return freeMemory;ITPUB个人空间@i.? sm~
}
YkttE|*~0 ITPUB个人空间,UxJ2KKM
public void setFreeMemory(long freeMemory) {ITPUB个人空间!f@Ruq Gnq
this.freeMemory = freeMemory;
voU0U%pQ0fZ"a0 }
Pp@3HTca0A0 ITPUB个人空间+I1~+_l,T] L
public long getFreePhysicalMemorySize() {
9{U8l\*zK/a0 return freePhysicalMemorySize;
UG ^K/Q!\\I0 }ITPUB个人空间IVAda8rn\.O
ITPUB个人空间u?#\)K3q4k`O8z
public void setFreePhysicalMemorySize(long freePhysicalMemorySize) {ITPUB个人空间%e4~gY~ W3L b
this.freePhysicalMemorySize = freePhysicalMemorySize;
2y |R7?p(]'i|W0 }ITPUB个人空间z+r&^?*^
ITPUB个人空间;|r`N o
public long getMaxMemory() {ITPUB个人空间3Lb)CQ/ir1B,z!j \
return maxMemory;
4D:V;Nlc0 }
*v7I1xQI"~#\ wo0
{&@2`Qg%B,I P#T0 public void setMaxMemory(long maxMemory) {
X0e1om6WeL0 this.maxMemory = maxMemory;ITPUB个人空间 o"z$iqWgr a0gm
}
[#{`2WP2E7I0 ITPUB个人空间3],i1P,hK1?A
public String getOsName() {ITPUB个人空间"mB;@h~5BYh
return osName;
v!M |n6q-P-j:t`d0 }ITPUB个人空间wnfCx@p G
ITPUB个人空间 O)H-kP1E(e
public void setOsName(String osName) {
vZ |2e!u7~JIh0l'K0 this.osName = osName;ITPUB个人空间f,A0qZu ]
}
pv1o+tD"H9P0
t6s7YK+G:rf;b0 public long getTotalMemory() {
O+wVl(?R_0 return totalMemory;
a4[Cwbi0 }ITPUB个人空间'\W)b/@2cF2ZA
Ia7c9zi0 public void setTotalMemory(long totalMemory) {ITPUB个人空间wgB gKW3Zw
this.totalMemory = totalMemory;
8Od[]'Yvq,T mv0 }ITPUB个人空间0I}qC0O
ITPUB个人空间&]Uj,j6n*W$D}U4B
public long getTotalMemorySize() {
u`_`$\V*bO,k0 return totalMemorySize;ITPUB个人空间PA5a?zt%i.^;} c
}
Y Aim(Lu0 ITPUB个人空间@XtE;ml
public void setTotalMemorySize(long totalMemorySize) {ITPUB个人空间4LG$W^+[@H P
this.totalMemorySize = totalMemorySize;ITPUB个人空间nBMi,mS)AC
}ITPUB个人空间}#cGX m'R
ITPUB个人空间g4fzGy:x
public int getTotalThread() {ITPUB个人空间_$ApB CLCUZ
return totalThread;ITPUB个人空间8A5{K&|)f3k/A
}ITPUB个人空间Sr_)Tu`P p
ITPUB个人空间/A*w`\zg-Y)l
public void setTotalThread(int totalThread) {ITPUB个人空间~"m3Lq8DO
this.totalThread = totalThread;ITPUB个人空间;nZs rq8T
}ITPUB个人空间 T2k,j;C5Dl,w r^x
0}v~r~)`0 public long getUsedMemory() {
M4q6`:QD4X)Sm0 return usedMemory;
4hG:uPa0 }ITPUB个人空间 T:] Td7\/y1wP
6I vM.B-|0 public void setUsedMemory(long usedMemory) {ITPUB个人空间as_}w,X
this.usedMemory = usedMemory;
\]d!e g9| c0 }
0C4nG9I$CK*A0
D};d+C5jW4wB0 public double getCpuRatio() {
|rE _y#n0 return cpuRatio;ITPUB个人空间H Cu"ai8lX
}ITPUB个人空间7EpYi(s L'R5K
VW ?Z s [0 public void setCpuRatio(double cpuRatio) {ITPUB个人空间gW `j"v(i-\
this.cpuRatio = cpuRatio;ITPUB个人空间;GW(U;S] k^3^J'E|8y
}
K OW.{5nKu8xT0 }ITPUB个人空间 pe*_L]"ftE2p|%h
接着编写一个获得当前的监控信息的接口,该类的代码如下所示:ITPUB个人空间T`rI%[W7H.?"L
package com.amigo.performance;ITPUB个人空间(?2u4J.o;G*\@w}
v:m nyV0 /** *//**
"z g2ccu wz0 * 获取系统信息的业务逻辑类接口.ITPUB个人空间9R _^;j@"}3~?3ydG
* @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>
WX }(aq#T mo%B0 * @version 1.0
1o*ozY-ZHW/lc#m%LAo0 * Creation date: 2008-3-11 - 上午10:06:06ITPUB个人空间.} k,R1@Iua)Wj
*/
(Y8]&[Wwf1`v0 public interface IMonitorService {
%z![7T oJm}-?0 /** *//**
!p)_Togf'i0 * 获得当前的监控对象.ITPUB个人空间cFu)Nbqt&MOM
* @return 返回构造好的监控对象
`EA RsY(J"G0 * @throws Exception
3s'jx+S4E `b/f+S8s0 * @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>ITPUB个人空间V:} v%iF }KM
* Creation date: 2008-4-25 - 上午10:45:08ITPUB个人空间Z K'd2N ]6f@
*/
"GT*r%o'B|0 public MonitorInfoBean getMonitorInfoBean() throws Exception;
v%@ ` r;v@X F0
q2y&R2aIJ n cQ0 }
;C z4e!no\B}?(O0 该类的实现类MonitorServiceImpl如下所示:ITPUB个人空间9he2SA-m{]5|i
package com.amigo.performance;ITPUB个人空间-XjzO;`k\
*L7`-Qy%z[k"S0 import java.io.InputStreamReader;
[ aJ!W"{J%K%G0 import java.io.LineNumberReader;
%}vfqq%p0F)[H0 ITPUB个人空间h3}tJ%\a:E~Hvj-e k
import sun.management.ManagementFactory;ITPUB个人空间*qFhZ~J
2y8d\}yY9N Jq0 import com.sun.management.OperatingSystemMXBean;ITPUB个人空间3D2Q$At-_%Lsa/n+H
:[*O] h8aN&k0 /** *//**
!kREy8il/b-z0 * 获取系统信息的业务逻辑实现类.ITPUB个人空间CJ}M o
* @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>
7}6L-sH+V"m0 * @version 1.0 Creation date: 2008-3-11 - 上午10:06:06
3te3Y%C;r}6V#C7?8AR0 */
$]/VljPp:?$D0 public class MonitorServiceImpl implements IMonitorService {ITPUB个人空间7VMzeu*R7V'SO
ITPUB个人空间Gzn:fh
private static final int CPUTIME = 30;
h+O-Ogyc^'k0
z)w;Y}^[M0 private static final int PERCENT = 100;ITPUB个人空间%Ib&TNGn1n:h
f9y sH.J0N^(q o i-Ze6|0 private static final int FAULTLENGTH = 10;
*|$~ |+FIj0 ITPUB个人空间#^ZP c'ptRmh
/** *//**ITPUB个人空间dd9T+? Q7|/r,Q
* 获得当前的监控对象.ITPUB个人空间 ~oEp/s4g(v L*}*vj5]
* @return 返回构造好的监控对象ITPUB个人空间kF,G9j'Z
* @throws ExceptionITPUB个人空间:M;S8fBI&c m?
* @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>
+qM Z$[7x0 * Creation date: 2008-4-25 - 上午10:45:08ITPUB个人空间%B5r8WK2~o2^
*/ITPUB个人空间7q;tf2J!`x%x6u:i
public MonitorInfoBean getMonitorInfoBean() throws Exception {
DZ(QQ$b0 int kb = 1024;
3q {;I#Pe@0 ITPUB个人空间*~UrPX7CqF'u^
// 可使用内存ITPUB个人空间8V.ww.C.~+FZ
long totalMemory = Runtime.getRuntime().totalMemory() / kb;ITPUB个人空间GW{3ta1\j5[k
// 剩余内存
-U,]8@|G6q2iv0 long freeMemory = Runtime.getRuntime().freeMemory() / kb;ITPUB个人空间"h^!o Q@G
// 最大可使用内存ITPUB个人空间/IX;NRAu1x:Y
long maxMemory = Runtime.getRuntime().maxMemory() / kb;ITPUB个人空间E6K:vXZ M
3g M!x#iv+q0U r0 OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory
{bv*F,xlj0 .getOperatingSystemMXBean();ITPUB个人空间 R1sNS_mH
ITPUB个人空间%S*o4[t W
// 操作系统
LFsJ9P aK0 String osName = System.getProperty("os.name");
@"w|J*WW0 // 总的物理内存ITPUB个人空间2y"w BV*Q/W i
long totalMemorySize = osmxb.getTotalPhysicalMemorySize() / kb;
u;y*Fu u B0 // 剩余的物理内存ITPUB个人空间GhY$Rk9BZ
long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize() / kb;
E } v-`/a0cd0 // 已使用的物理内存ITPUB个人空间 fC?uy
long usedMemory = (osmxb.getTotalPhysicalMemorySize() - osmxb
`C U[$Qw0 .getFreePhysicalMemorySize())
8M2j0wkkDD0 / kb;ITPUB个人空间o*O0tB`(mW
2KE1}fC E8L:Tu8[[0 // 获得线程总数
P#_VK,sv0 ThreadGroup parentThread;ITPUB个人空间_0\,n@&_m?b a
for (parentThread = Thread.currentThread().getThreadGroup(); parentThreadITPUB个人空间:|:D1S;y"bY*~8F
.getParent() != null; parentThread = parentThread.getParent())ITPUB个人空间"Q({1p(i6z6u
;ITPUB个人空间%R&_'C3q7y|zst#` {
int totalThread = parentThread.activeCount();ITPUB个人空间D9b7k T7GG-Kv/B!`
IX8\r6Z*|3C`?t$~6Q0 double cpuRatio = 0;ITPUB个人空间/E9cVaF1F
if (osName.toLowerCase().startsWith("windows")) {
'B4i:Y/pV;BwU0[0 cpuRatio = this.getCpuRatioForWindows();
9mG]J?C"XY2N_jZ0 }ITPUB个人空间-M3Mf q2m'CC%c
ITPUB个人空间p`*d7y w
// 构造返回对象ITPUB个人空间(HK[ Z`I3W@,g+T
MonitorInfoBean infoBean = new MonitorInfoBean();ITPUB个人空间1~]YN4Eb1y
infoBean.setFreeMemory(freeMemory);
u c9wD}D%rc7|0 infoBean.setFreePhysicalMemorySize(freePhysicalMemorySize);
E?+_#k R:V J0 infoBean.setMaxMemory(maxMemory);ITPUB个人空间T"LhZ#_1jS7G
infoBean.setOsName(osName);
0u3b%Q\6`?0 infoBean.setTotalMemory(totalMemory);ITPUB个人空间}n_%EHv8aQI
infoBean.setTotalMemorySize(totalMemorySize);ITPUB个人空间*jE%I6Q[!WS
infoBean.setTotalThread(totalThread);
8~_1jq,C/@0 infoBean.setUsedMemory(usedMemory);
2vJRH4gUrZ"qa;P0 infoBean.setCpuRatio(cpuRatio);
kY&G])fz:T;D!o0 return infoBean;
B Z9_fa|'m:`8Pc0 }
gq6b$f-ypm z0
)NRL'v[H$kC0 /** *//**ITPUB个人空间n!YX1[ G5y&q#B
* 获得CPU使用率.
@%Z]p?0tP0 * @return 返回cpu使用率
?6fw3cgM&OC;~0 * @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>ITPUB个人空间,h&h
首先编写一个MonitorInfoBean类,用来装载监控的一些信息,包括物理内存、剩余的物理内存、已使用的物理内存、内存使用率等字段,该类的代码如下:
~|4um F(a0 package com.amigo.performance;ITPUB个人空间p&|}XZh2G,Y
)t)G(A e;~,R^%G$h0 /** *//**ITPUB个人空间6u#s(x3sl1D/VMxC
* 监视信息的JavaBean类.ITPUB个人空间Yq9oM*N} A
* @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>
\N1A9`/J_0 * @version 1.0 ITPUB个人空间yLx5I#P3M9[#?
* Creation date: 2008-4-25 - 上午10:37:00
-X;JB8Q-p7SS0 */
-}*NIY.~;Js0 public class MonitorInfoBean {
0V`e6X!qf:x&o0 /** *//** 可使用内存. */ITPUB个人空间3J*@1V/dC A0f6O.A t k"f%Z
private long totalMemory;
@)@@-[^kF0
eQ*@(Mm0 /** *//** 剩余内存. */
{o)H:u-@j r0 private long freeMemory;ITPUB个人空间$HLFS h)e,n;I
'y0ZY3q&K&t:Q0 /** *//** 最大可使用内存. */
L(oX@Z9W8N0 private long maxMemory;ITPUB个人空间!fO^cu H)G1x
ITPUB个人空间4x2T$EcaS
/** *//** 操作系统. */
qk md(Q8D0 private String osName;ITPUB个人空间LmJCjE k,g4\
ITPUB个人空间o*PK#n^C7z5T#o
/** *//** 总的物理内存. */ITPUB个人空间!Ps7R,VC$X
private long totalMemorySize;ITPUB个人空间!q3[:g)g;U d7`Q
ITPUB个人空间fLL,l1p9O$w
/** *//** 剩余的物理内存. */
ND6~@.L'T$t;\0e0 private long freePhysicalMemorySize;
!R%E!r1b;ReX1E@^F0 ITPUB个人空间6g*~nH)KR3}:S{'y
/** *//** 已使用的物理内存. */
{)fQx}9{ XK0 private long usedMemory;
SU$hE$`"K0
6Q*~q1f(D5a1{0 /** *//** 线程总数. */ITPUB个人空间9bf BkHg
private int totalThread;
[!mew#so7@0 ITPUB个人空间9?kq6U[eef
/** *//** cpu使用率. */ITPUB个人空间Y'[P` i.P
private double cpuRatio;
|^a)[8t+cZ0 ITPUB个人空间U%W*p*\ R~+Hu$W
public long getFreeMemory() {
Ym5|g%qG0 return freeMemory;ITPUB个人空间@i.? sm~
}
YkttE|*~0 ITPUB个人空间,UxJ2KKM
public void setFreeMemory(long freeMemory) {ITPUB个人空间!f@Ruq Gnq
this.freeMemory = freeMemory;
voU0U%pQ0fZ"a0 }
Pp@3HTca0A0 ITPUB个人空间+I1~+_l,T] L
public long getFreePhysicalMemorySize() {
9{U8l\*zK/a0 return freePhysicalMemorySize;
UG ^K/Q!\\I0 }ITPUB个人空间IVAda8rn\.O
ITPUB个人空间u?#\)K3q4k`O8z
public void setFreePhysicalMemorySize(long freePhysicalMemorySize) {ITPUB个人空间%e4~gY~ W3L b
this.freePhysicalMemorySize = freePhysicalMemorySize;
2y |R7?p(]'i|W0 }ITPUB个人空间z+r&^?*^
ITPUB个人空间;|r`N o
public long getMaxMemory() {ITPUB个人空间3Lb)CQ/ir1B,z!j \
return maxMemory;
4D:V;Nlc0 }
*v7I1xQI"~#\ wo0
{&@2`Qg%B,I P#T0 public void setMaxMemory(long maxMemory) {
X0e1om6WeL0 this.maxMemory = maxMemory;ITPUB个人空间 o"z$iqWgr a0gm
}
[#{`2WP2E7I0 ITPUB个人空间3],i1P,hK1?A
public String getOsName() {ITPUB个人空间"mB;@h~5BYh
return osName;
v!M |n6q-P-j:t`d0 }ITPUB个人空间wnfCx@p G
ITPUB个人空间 O)H-kP1E(e
public void setOsName(String osName) {
vZ |2e!u7~JIh0l'K0 this.osName = osName;ITPUB个人空间f,A0qZu ]
}
pv1o+tD"H9P0
t6s7YK+G:rf;b0 public long getTotalMemory() {
O+wVl(?R_0 return totalMemory;
a4[Cwbi0 }ITPUB个人空间'\W)b/@2cF2ZA
Ia7c9zi0 public void setTotalMemory(long totalMemory) {ITPUB个人空间wgB gKW3Zw
this.totalMemory = totalMemory;
8Od[]'Yvq,T mv0 }ITPUB个人空间0I}qC0O
ITPUB个人空间&]Uj,j6n*W$D}U4B
public long getTotalMemorySize() {
u`_`$\V*bO,k0 return totalMemorySize;ITPUB个人空间PA5a?zt%i.^;} c
}
Y Aim(Lu0 ITPUB个人空间@XtE;ml
public void setTotalMemorySize(long totalMemorySize) {ITPUB个人空间4LG$W^+[@H P
this.totalMemorySize = totalMemorySize;ITPUB个人空间nBMi,mS)AC
}ITPUB个人空间}#cGX m'R
ITPUB个人空间g4fzGy:x
public int getTotalThread() {ITPUB个人空间_$ApB CLCUZ
return totalThread;ITPUB个人空间8A5{K&|)f3k/A
}ITPUB个人空间Sr_)Tu`P p
ITPUB个人空间/A*w`\zg-Y)l
public void setTotalThread(int totalThread) {ITPUB个人空间~"m3Lq8DO
this.totalThread = totalThread;ITPUB个人空间;nZs rq8T
}ITPUB个人空间 T2k,j;C5Dl,w r^x
0}v~r~)`0 public long getUsedMemory() {
M4q6`:QD4X)Sm0 return usedMemory;
4hG:uPa0 }ITPUB个人空间 T:] Td7\/y1wP
6I vM.B-|0 public void setUsedMemory(long usedMemory) {ITPUB个人空间as_}w,X
this.usedMemory = usedMemory;
\]d!e g9| c0 }
0C4nG9I$CK*A0
D};d+C5jW4wB0 public double getCpuRatio() {
|rE _y#n0 return cpuRatio;ITPUB个人空间H Cu"ai8lX
}ITPUB个人空间7EpYi(s L'R5K
VW ?Z s [0 public void setCpuRatio(double cpuRatio) {ITPUB个人空间gW `j"v(i-\
this.cpuRatio = cpuRatio;ITPUB个人空间;GW(U;S] k^3^J'E|8y
}
K OW.{5nKu8xT0 }ITPUB个人空间 pe*_L]"ftE2p|%h
接着编写一个获得当前的监控信息的接口,该类的代码如下所示:ITPUB个人空间T`rI%[W7H.?"L
package com.amigo.performance;ITPUB个人空间(?2u4J.o;G*\@w}
v:m nyV0 /** *//**
"z g2ccu wz0 * 获取系统信息的业务逻辑类接口.ITPUB个人空间9R _^;j@"}3~?3ydG
* @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>
WX }(aq#T mo%B0 * @version 1.0
1o*ozY-ZHW/lc#m%LAo0 * Creation date: 2008-3-11 - 上午10:06:06ITPUB个人空间.} k,R1@Iua)Wj
*/
(Y8]&[Wwf1`v0 public interface IMonitorService {
%z![7T oJm}-?0 /** *//**
!p)_Togf'i0 * 获得当前的监控对象.ITPUB个人空间cFu)Nbqt&MOM
* @return 返回构造好的监控对象
`EA RsY(J"G0 * @throws Exception
3s'jx+S4E `b/f+S8s0 * @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>ITPUB个人空间V:} v%iF }KM
* Creation date: 2008-4-25 - 上午10:45:08ITPUB个人空间Z K'd2N ]6f@
*/
"GT*r%o'B|0 public MonitorInfoBean getMonitorInfoBean() throws Exception;
v%@ ` r;v@X F0
q2y&R2aIJ n cQ0 }
;C z4e!no\B}?(O0 该类的实现类MonitorServiceImpl如下所示:ITPUB个人空间9he2SA-m{]5|i
package com.amigo.performance;ITPUB个人空间-XjzO;`k\
*L7`-Qy%z[k"S0 import java.io.InputStreamReader;
[ aJ!W"{J%K%G0 import java.io.LineNumberReader;
%}vfqq%p0F)[H0 ITPUB个人空间h3}tJ%\a:E~Hvj-e k
import sun.management.ManagementFactory;ITPUB个人空间*qFhZ~J
2y8d\}yY9N Jq0 import com.sun.management.OperatingSystemMXBean;ITPUB个人空间3D2Q$At-_%Lsa/n+H
:[*O] h8aN&k0 /** *//**
!kREy8il/b-z0 * 获取系统信息的业务逻辑实现类.ITPUB个人空间CJ}M o
* @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>
7}6L-sH+V"m0 * @version 1.0 Creation date: 2008-3-11 - 上午10:06:06
3te3Y%C;r}6V#C7?8AR0 */
$]/VljPp:?$D0 public class MonitorServiceImpl implements IMonitorService {ITPUB个人空间7VMzeu*R7V'SO
ITPUB个人空间Gzn:fh
private static final int CPUTIME = 30;
h+O-Ogyc^'k0
z)w;Y}^[M0 private static final int PERCENT = 100;ITPUB个人空间%Ib&TNGn1n:h
f9y sH.J0N^(q o i-Ze6|0 private static final int FAULTLENGTH = 10;
*|$~ |+FIj0 ITPUB个人空间#^ZP c'ptRmh
/** *//**ITPUB个人空间dd9T+? Q7|/r,Q
* 获得当前的监控对象.ITPUB个人空间 ~oEp/s4g(v L*}*vj5]
* @return 返回构造好的监控对象ITPUB个人空间kF,G9j'Z
* @throws ExceptionITPUB个人空间:M;S8fBI&c m?
* @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>
+qM Z$[7x0 * Creation date: 2008-4-25 - 上午10:45:08ITPUB个人空间%B5r8WK2~o2^
*/ITPUB个人空间7q;tf2J!`x%x6u:i
public MonitorInfoBean getMonitorInfoBean() throws Exception {
DZ(QQ$b0 int kb = 1024;
3q {;I#Pe@0 ITPUB个人空间*~UrPX7CqF'u^
// 可使用内存ITPUB个人空间8V.ww.C.~+FZ
long totalMemory = Runtime.getRuntime().totalMemory() / kb;ITPUB个人空间GW{3ta1\j5[k
// 剩余内存
-U,]8@|G6q2iv0 long freeMemory = Runtime.getRuntime().freeMemory() / kb;ITPUB个人空间"h^!o Q@G
// 最大可使用内存ITPUB个人空间/IX;NRAu1x:Y
long maxMemory = Runtime.getRuntime().maxMemory() / kb;ITPUB个人空间E6K:vXZ M
3g M!x#iv+q0U r0 OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory
{bv*F,xlj0 .getOperatingSystemMXBean();ITPUB个人空间 R1sNS_mH
ITPUB个人空间%S*o4[t W
// 操作系统
LFsJ9P aK0 String osName = System.getProperty("os.name");
@"w|J*WW0 // 总的物理内存ITPUB个人空间2y"w BV*Q/W i
long totalMemorySize = osmxb.getTotalPhysicalMemorySize() / kb;
u;y*Fu u B0 // 剩余的物理内存ITPUB个人空间GhY$Rk9BZ
long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize() / kb;
E } v-`/a0cd0 // 已使用的物理内存ITPUB个人空间 fC?uy
long usedMemory = (osmxb.getTotalPhysicalMemorySize() - osmxb
`C U[$Qw0 .getFreePhysicalMemorySize())
8M2j0wkkDD0 / kb;ITPUB个人空间o*O0tB`(mW
2KE1}fC E8L:Tu8[[0 // 获得线程总数
P#_VK,sv0 ThreadGroup parentThread;ITPUB个人空间_0\,n@&_m?b a
for (parentThread = Thread.currentThread().getThreadGroup(); parentThreadITPUB个人空间:|:D1S;y"bY*~8F
.getParent() != null; parentThread = parentThread.getParent())ITPUB个人空间"Q({1p(i6z6u
;ITPUB个人空间%R&_'C3q7y|zst#` {
int totalThread = parentThread.activeCount();ITPUB个人空间D9b7k T7GG-Kv/B!`
IX8\r6Z*|3C`?t$~6Q0 double cpuRatio = 0;ITPUB个人空间/E9cVaF1F
if (osName.toLowerCase().startsWith("windows")) {
'B4i:Y/pV;BwU0[0 cpuRatio = this.getCpuRatioForWindows();
9mG]J?C"XY2N_jZ0 }ITPUB个人空间-M3Mf q2m'CC%c
ITPUB个人空间p`*d7y w
// 构造返回对象ITPUB个人空间(HK[ Z`I3W@,g+T
MonitorInfoBean infoBean = new MonitorInfoBean();ITPUB个人空间1~]YN4Eb1y
infoBean.setFreeMemory(freeMemory);
u c9wD}D%rc7|0 infoBean.setFreePhysicalMemorySize(freePhysicalMemorySize);
E?+_#k R:V J0 infoBean.setMaxMemory(maxMemory);ITPUB个人空间T"LhZ#_1jS7G
infoBean.setOsName(osName);
0u3b%Q\6`?0 infoBean.setTotalMemory(totalMemory);ITPUB个人空间}n_%EHv8aQI
infoBean.setTotalMemorySize(totalMemorySize);ITPUB个人空间*jE%I6Q[!WS
infoBean.setTotalThread(totalThread);
8~_1jq,C/@0 infoBean.setUsedMemory(usedMemory);
2vJRH4gUrZ"qa;P0 infoBean.setCpuRatio(cpuRatio);
kY&G])fz:T;D!o0 return infoBean;
B Z9_fa|'m:`8Pc0 }
gq6b$f-ypm z0
)NRL'v[H$kC0 /** *//**ITPUB个人空间n!YX1[ G5y&q#B
* 获得CPU使用率.
@%Z]p?0tP0 * @return 返回cpu使用率
?6fw3cgM&OC;~0 * @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>ITPUB个人空间,h&h