自己动手创建 AIX 平台上的性能监测工具
2008-11-10 08:23:07 来源:WEB开发网在 aixperfmonitor 脚本中,最重要的部分就是 updatePerflog 这个函数,它对 sar 和 svmon 的命令行输出进行处理以得到我们想要的性能数据。比如,对于系统 CPU 使用情况,我们抓取了 %usr, %sys, %wio, %idle 这四个性能参数;对于系统内存使用情况 , 我们抓取了 inuse, free, pin, virtual 这四个性能参数。另外,checkpProcess 函数也值得我们注意,它检查相关进程是否真的存在,如果进程不存在,则不会在 updatePerflog 函数中抓取相关性能数据。
有了 aixperfmonitor.sh 脚本之后,我们就可以监测系统性能数据了。比如说,我们希望监测时间为 3 天,监测间隔为 10 分钟,那么我们可以通过下面的脚本完成调用:
bash-3.00# nohup ./aixperfmonitor.sh -t 4320 -i 10 2>&1 >/tmp/perfmonitor_output &
生成基于 WEB 的性能图表
有了性能监测数据以后,我们就可以开始利用 JFreeChart 来生成图表并且把它们发布到 WEB 上了。
首先,让我们利用 JFreeChart 来编写生成图表的 Java 代码。由于下载的 JfreeChart 包中带有丰富的例程,我们不需重头开始,只要对其中的例程加以修改即可。AIXPerfChart.java 包含了生成图表的全部代码。
清单 2 AIXPerfChart.java( 只显示部分源代码 )
public class AIXPerfChart {
protected final static Pattern FILE_PATTERN =
Pattern.compile("([^/]+).dat");
protected final static Pattern DATA_LINE =
// 匹配数据文件的格式 , 每个 ([^s]+) 匹配数据文件中的一列 , 共 5 列
Pattern.compile("s*([^s]+)s+([^s]+)s+([^s]+)s+([^s]+)s+([^s]+)s*");
// 返回以小时为单位的监测时间
private double getTimeInDouble (String ts) {
String[] hms = ts.split(":");
double t = (Double.parseDouble(hms[0]) +
Double.parseDouble(hms[1]) / 60.0 +
Double.parseDouble(hms[2]) / 3600.0) ;
if(duration >= 0.0) {
if (lastTime > t)
duration += t + 24.0 - lastTime;
else
duration += t - lastTime;
} else {
duration = 0.0;
}
lastTime = t;
return duration; //by hours
}
// 根据数据文件的名字来决定图表的 title, x 轴和 y 轴的标签
private void parseFileName() {
String[] pathParts = dataFile.split("/");
int len = pathParts.length;
Matcher m = FILE_PATTERN.matcher(pathParts[len-1]);
if (m.matches()) {
chartType = m.group(1);
}
if (chartType.equals("cpu")) {
series.add(new XYSeries("User"));
series.add(new XYSeries("System"));
series.add(new XYSeries("WaitIO"));
series.add(new XYSeries("Idle"));
title = "SYSTEM CPU";
yAxisLabel = "Percentage";
} else if (chartType.equals("mem")) {
series.add(new XYSeries("Inuse"));
series.add(new XYSeries("Free"));
series.add(new XYSeries("Pin"));
series.add(new XYSeries("Virtual"));
title = "SYSTEM MEMORY";
yAxisLabel = "pages";
} else {
series.add(new XYSeries("Inuse"));
series.add(new XYSeries("Pin"));
series.add(new XYSeries("Pgsp"));
series.add(new XYSeries("Virtual"));
title = chartType.toUpperCase();
yAxisLabel = "pages";
}
}
// 创建数据集
private XYDataset createDataset() {
XYSeries s1 = series.get(0);
XYSeries s2 = series.get(1);
XYSeries s3 = series.get(2);
XYSeries s4 = series.get(3);
try {
if(!dataFile.startsWith("/")) { dataFile = workDir + "/" + dataFile; }
BufferedReader in =
new BufferedReader(new FileReader(dataFile));
String line;
while((line = in.readLine()) != null) {
Matcher m = DATA_LINE.matcher(line);
if (m.matches()) {
double x = getTimeInDouble(m.group(1));
double y1 = getYValueInDouble(m.group(2));
double y2 = getYValueInDouble(m.group(3));
double y3 = getYValueInDouble(m.group(4));
double y4 = getYValueInDouble(m.group(5));
s1.add(x, y1);
s2.add(x, y2);
s3.add(x, y3);
s4.add(x, y4);
} else {
}
}
in.close();
} catch (Exception e) {
System.err.println(e.toString());
}
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(s1);
dataset.addSeries(s2);
dataset.addSeries(s3);
dataset.addSeries(s4);
return dataset;
}
}
- ››创建SQL2005自动备份,定期删除的维护计划
- ››创建动态表单 javascript
- ››自己动手写iPhone wap浏览器之界面架构篇
- ››创建基于PPTP的站点到站点VPN连接:ISA2006系列之...
- ››创建基于L2TP的站点到站点的VPN连接:ISA2006系列...
- ››创建一个Twisted Reactor TCP服务器
- ››自己也能DIY个性真人QQ表情
- ››自己动手!巧法让酷狗动感歌词更完美
- ››自己编译Google Android内核的Linux源码
- ››自己写的一个jquery模板引擎(json比较好用)
- ››创建Windows Mobile上兼容性好的UI 程序
- ››创建android的Service
更多精彩
赞助商链接