WEB开发网
开发学院操作系统Linux/Unix 自己动手创建 AIX 平台上的性能监测工具 阅读

自己动手创建 AIX 平台上的性能监测工具

 2008-11-10 08:23:07 来源:WEB开发网   
核心提示: 在 aixperfmonitor 脚本中,最重要的部分就是 updatePerflog 这个函数,自己动手创建 AIX 平台上的性能监测工具(5),它对 sar 和 svmon 的命令行输出进行处理以得到我们想要的性能数据,比如,我们不需重头开始,只要对其中的例程加以修改即可,对于系统 C

在 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;
}
}

上一页  1 2 3 4 5 6 7  下一页

Tags:自己 动手 创建

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接