资源预览内容
第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
第9页 / 共11页
第10页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
JRobin是一个很强大的存储和用图形展示基于时间序列数据的工具。只要有合适的需求,能够提供提供满足这些需求的数据,JRobin就能合理地存储这些数据,并且生成非常漂亮的图形。 在基于JRobin的应用中,最主要的工具并不在于JRobin,而是如何设计应用和使用Java代码采用相应的手段获取感兴趣的数据。通过在Java中执行外部命令来获取Ping的响应时间。本文的应用旨在对计算机CPU的使用率进行监视,因为如何在Windows和Linux上获取CPU的使用率就成为了关键要解决的问题。 1、在Windows上获取CPU使用率: WMI提供了在Windows上获取计算机各种有用信息的接口,尤其可以利用WMI来获取计算机性能有关的数据。可以用通过 Win32_Processor对象来获取CPU的使用率,该对象LoadPercentage属性保存了相应CPU的负载情况。在本例中,将计算机上各 个CPU使用率进行简单平均,既是该计算机CPU的使用率。脚本如下: strComputer = . Set objWMIService = GetObject(winmgmts: _ & impersonationLevel=impersonate! & strComputer & rootcimv2) Set colItems = objWMIService.ExecQuery(Select * from Win32_Processor ,48) load = 0 n = 0 For Each objItem in colItems load = load + objItem.LoadPercentage n = n + 1 Next Wscript.Echo (load/n) 该最后脚本输出CPU平均使用率,Java程序可以执行该脚本获取标准输出,得到CPU平均使用率。 2、在Linux上获取CPU使用率: Linux操作系统的/proc文件系统提供了与系统和进程有关的信息。通过访问/proc/stat就可以获取CPU的使用情况。其bash脚本如下: user=cat /proc/stat | head -n 1 | awk print $2 nice=cat /proc/stat | head -n 1 | awk print $3 system=cat /proc/stat | head -n 1 | awk print $4 idle=cat /proc/stat | head -n 1 | awk print $5 iowait=cat /proc/stat | head -n 1 | awk print $6 irq=cat /proc/stat | head -n 1 | awk print $7 softirq=cat /proc/stat | head -n 1 | awk print $8 let used=$user+$nice+$system+$iowait+$irq+$softirq let total=$used+$idle echo $used $total 该脚本最后输出自机器启动以来,CPU总共使用的时间和总共运行时间。要想获取CPU使用率,还需要作进行一步处理。处理步骤如下: (1)运行脚本,得到相应数据:1000 10000 (2)sleep 60秒 (3)运行脚本,得到相应数据:7000 70000 (4)那么在这段时间内,CPU的使用率就等于:(7000 - 1000)/(70000 - 10000)= 10%。 (5)定时运行脚本,就可以得到每个时段CPU的使用率。 3、与获取Ping响应时间代码的异同: 这两个程序实现的功能基本类似,就是获取数据,利用JRobin保存和画图。其中利用JRobin保存和画图的功能除了保存的数据源、显示的文本信息不同以外,其他都是相同的。他们最大的不同在于获取和处理数据的方式。 在WIndows下,Ping程序利用Ping命令来获取数据,而CPU监视程序则使用VBScript利用WMI接口通过CScript.EXE执行脚本来实现。 在Linux下,不能直接获取CPU使用率信息,需要在下一次获取到CPU使用信息时,对数据进行进一步出来才能得到。 4、看看成果: 5、事例代码: import java.awt.Color; import java.awt.Font; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Timer; import java.util.TimerTask; import java.util.logging.Logger; import org.jrobin.core.RrdDb; import org.jrobin.core.RrdDef; import org.jrobin.core.Sample; import org.jrobin.graph.RrdGraph; import org.jrobin.graph.RrdGraphDef; public class CPUMonitor public static String execute(String commands) String strs = null; File scriptFile = null; try List cmdList = new ArrayList(); String osName = System.getProperty(os.name); if (osName.indexOf(Windows) -1) scriptFile = File.createTempFile(monitor, .vbs); cmdList.add(CMD.EXE); cmdList.add(/C); cmdList.add(CSCRIPT.EXE); cmdList.add(/NoLogo); else scriptFile = File.createTempFile(monitor, .sh); cmdList.add(/bin/bash); String fileName = scriptFile.getCanonicalPath(); PrintWriter writer = new PrintWriter(scriptFile); for (int i = 0; i commands.length; i+) writer.println(commandsi); writer.flush(); writer.close(); cmdList.add(fileName); writer.flush(); writer.close(); cmdList.add(fileName); ProcessBuilder pb = new ProcessBuilder(cmdList); Process p = pb.start(); p.waitFor(); String line = null; BufferedReader stdout = new BufferedReader(new InputStreamReader(p .getInputStream(); List stdoutList = new ArrayList(); while (line = stdout.readLine() != null) stdoutList.add(line); BufferedReader stderr = new BufferedReader(new InputStreamReader(p .getErrorStream(); List stderrList = new ArrayList(); while (line = stderr.readLine() != null) stderrList.add(line); strs = stdoutList.toArray(new String0); catch (Exception e) e.printStackTrace(); finally if (scriptFile != null) scriptFile.delete(); return strs; private String dataFormat = %3f; private Logger logger = Logger.getLogger(this.getClass().getName(); private String monitorName = cpu; private String dataDir = .; private int step = 10; private String rrdPath = ; private Timer timer = new Timer(); private long timeStart = 0; protected int width = 600; protected int height = 150; public CPUMonitor(String dataDir, int step) this.dataDir = dataDir; this.step = step;
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号