`

远程监控工具top 和 nmon

 
阅读更多

 

 

三 根据linux top 命名编写脚本进行监控。

   单次监控脚本

  

#!/bin/sh


#program
#   this program is mainly used to monitor flow's thread condition Eg:cpu mem
#history

#fileName=result_$(date +%Y%m%d-%H:%M).txt
fileName=result_$(date +%Y%m%d-%H).txt
#echo "---------------------------------------------------------------------------------------------------- " |tee -a $fileName
#echo "---------------------------------------------------------------------------------------------------- "|tee -a $fileName


#monitor the process to file
#echo "starting to monitor...................." |tee -a $fileName

declare -a array

array=$(ps -ef | grep While | grep -v grep    | awk '{print $2}')

#awk 'BEGIN {print split('"\"$test\""', array, "a")}'
#awk 'BEGIN {print split($test, array, "\n")}'
#-b  以批量模式运行,但不能接受命令行输入;
#-c 显示命令行,而不仅仅是命令名;
#-d N  显示两次刷新时间的间隔,比如 -d 5,表示两次刷新间隔为5秒;
#-i 禁止显示空闲进程或僵尸进程;
#-n NUM  显示更新次数,然后退出。比如 -n 5,表示top更新5次数据就退出;
#-p PID 仅监视指定进程的ID;PID是一个数值;
#-q  不经任何延时就刷新;
#-s  安全模式运行,禁用一些效互指令;
#-S 累积模式,输出每个进程的总的CPU时间,包括已死的子进程;
for element in $array 
do  
#    echo   "$element------------------------------" |tee -a $fileName
#	top -b -n 1 -d 3 -p $element |  grep -v $element | tee -a  $fileName
	top -b -n 1 -d 3 -p $element |  grep $element | tee -a  $fileName
        echo " "|tee -a $fileName
done  
echo "----------------------------------------------------"|tee -a $fileName

     循环进行多次调用

      

#!/bin/bash

while true;do
       sh ./monitor.sh 

sleep 1
continue
done

    生成的脚本监控出来的数据目前有两种方式展示:

   第一种excel对某列做图标

   第二种自己写java来解析

 

   贴一下java解析的思路,java解析出来的数据,利用ExtJS中的报表工具,则可以生成表了。

  

 

      

package clouddba.instance;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.mysql.jdbc.StringUtils;

public class ProcessShellData {
	
	public static void main(String[] args) throws IOException {
		String file = "D:\\data\\result_20150108-17_50loop.txt";
		singlePID(file);
//		morePID();
	}
	
	/**
	 * index 8 is cpu 
	 * index 9 is mem
	 * process data which the pid is interval such as  
	 * 		pid1 ...
	 *      pid2 ...
	 *      pid1 ...
	 *      pid2 ...
	 * @param file
	 * @throws IOException
	 */
	public static void morePID(String file) throws NumberFormatException, IOException{
		BufferedReader reader = new BufferedReader(new FileReader(new File(file)));
		
		String line = null;
		
		String pid = "-1";
		int times = 0;
		int dataSize = 0 ;  //nth data
		
		List<Map<String,Object>> dataList = new ArrayList<Map<String,Object>>();
		while((line = reader.readLine()) != null ){
			if(line.trim().equalsIgnoreCase("END")){
				break;
			}
			if(StringUtils.isEmptyOrWhitespaceOnly(line)){
				continue;
			}
			
			
			String[] arr = line.trim().split("\\s+");
			
			//reset data
			if(!pid.equals(arr[0])){
				pid = arr[0];
				times = 0;
				dataSize ++ ;
			}
			
			Map<String,Object> map = null;
			
			if(dataSize > 1){
				map = dataList.get(times);
				if(map == null ){
//					System.out.println("null");
				}else{
					map.put("name", times++ +"");
					map.put("data"+dataSize,Float.parseFloat(arr[8])+"");
				}
			
			}else{
			    map  = new HashMap<String, Object>();
			    map.put("name", times++ +"");
				map.put("data"+dataSize,Float.parseFloat(arr[8])+"");
				dataList.add(map);
			}
			
		}
		
		for(Map<String,Object> map : dataList){
			StringBuilder buff = new StringBuilder();
			for(int i = 1; i<= dataSize ; i++){
				if(i ==  1){
					buff.append("{ 'name': '");
					buff.append(map.get("name"));
					buff.append("','data"+i+"':");
					buff.append(map.get("data"+i) == null ? 0 :map.get("data"+i) );
					buff.append(",");
					
					continue;
				}
				
				if(i == dataSize){
					buff.append("'data"+i+"':");
					buff.append(map.get("data"+i) == null ? 0 :map.get("data"+i));
					buff.append("},");
					continue;
				}
			
				
				buff.append("'data"+i+"':");
				buff.append(map.get("data"+i) == null ? 0 :map.get("data"+i));
				buff.append(",");
				
				
			}
			System.out.println(buff.toString());
		
		}
	}
	
	
	/**
	 * index 8 is cpu 
	 * index 9 is mem
	 * process data which the pid is sequent such as
	 * 		pid1 ...
	 *      pid1 ...
	 *      pid2 ...
	 *      pid2 ...
	 * @param file
	 * @throws IOException
	 */
	public static void morePIDComplex() throws NumberFormatException, IOException{
		BufferedReader reader = new BufferedReader(new FileReader(new File("D:\\data\\merge.txt")));
		
		String line = null;
		
		String pid = "-1";
		int times = 0;
		int dataSize = 1 ;
		
		List<Map<String,Object>> dataList = new ArrayList<Map<String,Object>>();
		while((line = reader.readLine()) != null ){
			if(line.trim().equalsIgnoreCase("END")){
				break;
			}
			if(StringUtils.isEmptyOrWhitespaceOnly(line)){
				continue;
			}
			
			
			String[] arr = line.trim().split("\\s+");
			for(int i=0 ;i<arr.length; i++){
//				System.out.println(i +":"+ arr[i]);
			}
			
			if(!pid.equals(arr[0])){
				pid = arr[0];
				times = 0;
				dataSize ++ ;
			}
			
			Map<String,Object> map = null;
			
			if(dataSize > 1){
				map = dataList.get(times);
				if(map == null ){
					System.out.println("null");
				}
				map.put("name", times++ +"");
				map.put("data"+dataSize,Float.parseFloat(arr[8])+"");
			}else{
			    map  = new HashMap<String, Object>();
			    map.put("name", times++ +"");
				map.put("data"+dataSize,Float.parseFloat(arr[8])+"");
				dataList.add(map);
			}
			
		}
		
		for(Map<String,Object> map : dataList){
			StringBuilder buff = new StringBuilder();
			for(int i = 1; i<= dataSize ; i++){
				if(i ==  1){
					buff.append("{ 'name': '");
					buff.append(map.get("name"));
					buff.append("','data"+i+"':");
					buff.append(map.get("data"+i) == null ? 0 :map.get("data"+i) );
					buff.append(",");
					
					continue;
				}
				
				if(i == dataSize){
					buff.append("'data"+i+"':");
					buff.append(map.get("data"+i) == null ? 0 :map.get("data"+i));
					buff.append("},");
					continue;
				}
			
				
				buff.append("'data"+i+"':");
				buff.append(map.get("data"+i) == null ? 0 :map.get("data"+i));
				buff.append(",");
				
				
			}
			System.out.println(buff.toString());
		
		}
	}

	/**
	 * index 8 is cpu 
	 * index 9 is mem
	 * process data which the pid is sequent 
	 * @param file
	 * @throws IOException
	 */
	public static void singlePID(String file) throws IOException {
		BufferedReader reader = new BufferedReader(new FileReader(new File(
				file)));
		String line = null;

		String pid = "-1";
		int times = 0;

		StringBuilder buff = new StringBuilder();
		while ((line = reader.readLine()) != null) {
			//end
			if (line.trim().equalsIgnoreCase("END")) {
				break;
			}
			if (StringUtils.isEmptyOrWhitespaceOnly(line)) {
				continue;
			}

			String[] arr = line.trim().split("\\s+");
			for (int i = 0; i < arr.length; i++) {
				// System.out.println(i +":"+ arr[i]);
			}
			
			//reset data
			if (!pid.equals(arr[0])) {
				pid = arr[0];
				times = 0;
				buff = new StringBuilder();
			}

		
			buff.append("{ 'name': '");
			buff.append(times++);
			buff.append("',   'data1':");
			buff.append(Float.parseFloat(arr[9]));
			buff.append("},\n");
		
		}
		//delete last \n and ,
		buff.deleteCharAt(buff.length()-1);
		buff.deleteCharAt(buff.length()-1);
		System.out.println(buff.toString());

	}
	
}

  

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>user post test</title>
 <link rel="stylesheet" type="text/css" href="resources/css/ext-all.css" />
 <script type="text/javascript" src="ext-all-dev.js"></script>
	<script type="text/javascript">
			//窗口展示
	var store = Ext.create('Ext.data.JsonStore', {
    fields: ['name', 'data1', 'data2', 'data3', 'data4', 'data5'],
    data: [


    ]
	});

var chart1=Ext.create('Ext.chart.Chart', {
    width: 1000,
    height: 600,
    animate: true,
    store: store,
    
    axes: [
        {
            type: 'Numeric',
            position: 'left',
            fields: ['data1'],
            label: {
                renderer: Ext.util.Format.numberRenderer('0,0')
            },
            title: 'CPU',
            grid: true,
            minimum: 0
        },
        {
            type: 'Category',
            position: 'bottom',
            fields: ['name'],
            title: '采集间隔1s'
        }
    ],
    series: [
        {
            type: 'line',
            highlight: {
                size: 7,
                radius: 7
            },
            axis: 'left',
            xField: 'name',
            yField: 'data1',
            markerConfig: {
                type: 'circle',
                size: 1,
                radius: 1,
                'stroke-width': 0
            }
        },
        {
            type: 'line',
            highlight: {
                size: 7,
                radius: 7
            },
            axis: 'left',
            xField: 'name',
            yField: 'data2',
            markerConfig: {
                type: 'circle',
                size: 1,
                radius: 1,
                'stroke-width': 0
            }
        },
        {
            type: 'line',
            highlight: {
                size: 7,
                radius: 7
            },
            axis: 'left',
            xField: 'name',
            yField: 'data3',
            markerConfig: {
                type: 'circle',
                size: 1,
                radius: 1,
                'stroke-width': 0
            }
        },
        {
            type: 'line',
            highlight: {
                size: 7,
                radius: 7
            },
            axis: 'left',
            xField: 'name',
            yField: 'data4',
            markerConfig: {
                type: 'circle',
                size: 1,
                radius: 1,
                'stroke-width': 0
            }
        },
        {
            type: 'line',
            highlight: {
                size: 7,
                radius: 7
            },
            axis: 'left',
            xField: 'name',
            yField: 'data5',
            markerConfig: {
                type: 'circle',
                size: 1,
                radius: 1,
                'stroke-width': 0
            }
        }
    ]
});		

	Ext.onReady(function() {
	Ext.create('Ext.panel.Panel', {
    width: 1200,
    height: 1000,
    layout: 'border',
    items: [{
        title: 'Center Region',
        region: 'center',     // center region is required, no width/height specified
        xtype: 'panel',
        layout: 'fit',
        margins: '5 5 0 0'
    },{
        title: 'North Region is resizable',
        region: 'north',     // position for region
        xtype: 'panel',
       
        split: true,         // enable resizing
        margins: '0 5 5 5',
         items:[
       	chart1
       
       ]
    }],
    renderTo: Ext.getBody()
});
		



});
	

	
		</script>
</head>
<body>
	


</body>
</html>

    

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>user post test</title>
 <link rel="stylesheet" type="text/css" href="resources/css/ext-all.css" />
 <script type="text/javascript" src="ext-all-dev.js"></script>
	<script type="text/javascript">
			//窗口展示
	var store = Ext.create('Ext.data.JsonStore', {
    fields: ['name', 'data1', 'data2', 'data3', 'data4', 'data5'],
    data: [

{ 'name': '108','data1':2.0,'data2':0,'data3':0,'data4':0,'data5':0,'data6':0,'data7':0,'data8':0,'data9':0,'data10':0,'data11':0}
    ]
	});

var chart1=Ext.create('Ext.chart.Chart', {
    width: 1000,
    height: 500,
    animate: true,
    store: store,
    
    axes: [
        {
            type: 'Numeric',
            position: 'left',
            fields: ['data1'],
            label: {
                renderer: Ext.util.Format.numberRenderer('0,0')
            },
            title: 'CPU',
            grid: true,
            minimum: 0
        },
        {
            type: 'Category',
            position: 'bottom',
            fields: ['name'],
            title: '采集间隔0.1s'
        }
    ],
    series: [
        {
            type: 'line',
            highlight: {
                size: 7,
                radius: 7
            },
            axis: 'left',
            xField: 'name',
            yField: 'data1',
            markerConfig: {
                type: 'circle',
                size: 1,
                radius: 1,
                'stroke-width': 0
            }
        },
        {
            type: 'line',
            highlight: {
                size: 7,
                radius: 7
            },
            axis: 'left',
            xField: 'name',
            yField: 'data2',
            markerConfig: {
                type: 'circle',
                size: 1,
                radius: 1,
                'stroke-width': 0
            }
        },
        {
            type: 'line',
            highlight: {
                size: 7,
                radius: 7
            },
            axis: 'left',
            xField: 'name',
            yField: 'data3',
            markerConfig: {
                type: 'circle',
                size: 1,
                radius: 1,
                'stroke-width': 0
            }
        },
        {
            type: 'line',
            highlight: {
                size: 7,
                radius: 7
            },
            axis: 'left',
            xField: 'name',
            yField: 'data4',
            markerConfig: {
                type: 'circle',
                size: 1,
                radius: 1,
                'stroke-width': 0
            }
        },
        {
            type: 'line',
            highlight: {
                size: 7,
                radius: 7
            },
            axis: 'left',
            xField: 'name',
            yField: 'data5',
            markerConfig: {
                type: 'circle',
                size: 1,
                radius: 1,
                'stroke-width': 0
            }
        }
    ]
});		

	Ext.onReady(function() {
	Ext.create('Ext.panel.Panel', {
    width: 1200,
    height: 1000,
    layout: 'border',
    items: [{
        title: 'Center Region',
        region: 'center',     // center region is required, no width/height specified
        xtype: 'panel',
        layout: 'fit',
        margins: '5 5 0 0'
    },{
        title: 'North Region is resizable',
        region: 'north',     // position for region
        xtype: 'panel',
       
        split: true,         // enable resizing
        margins: '0 5 5 5',
         items:[
       	chart1
       
       ]
    }],
    renderTo: Ext.getBody()
});
		



});
	

	
		</script>
</head>
<body>
	


</body>
</html>

   

 

    四监控系统整体性能 nmon 

     实现的是对服务器的实时监控,在实际的性能测试中我们需要把一段时间之内的数据记录下来,可以使用      如下命令:

          nmon -fT -s 10 -c 90

     上面命令的含义是:

          -f :按标准格式输出文件名称:<hostname>_YYYYMMDD_HHMM.nmon

          -t 输出最耗资源的进程

          -s :每隔n秒抽样一次,这里为30秒

          -c :取出多少个抽样数量,这里为10,即监控=10*30/60=5分钟

  

     生成的nmon文件 用excel打开即可。

   

  • 大小: 64.8 KB
  • 大小: 60.2 KB
分享到:
评论

相关推荐

    controller监控Linux需要的文件

    除了`rpc.rstatd`,Linux还有其他监控工具,如`nmon`、`top`、`htop`、`iostat`、`vmstat`、`netstat`等,它们各自侧重不同的监控层面,可以根据实际需求组合使用。 总的来说,监控Linux系统是一项复杂但必要的任务...

    liunx管理工具.rar

    17. **Nmon**:系统性能监控工具,提供CPU、内存、硬盘、网络等资源的实时监控。 18. **Strace**:系统调用跟踪工具,用于调试程序和分析系统问题。 以上只是部分常见的Linux管理工具,实际的“liunx管理工具.rar...

    中标麒麟Linux系统的性能与安全.pptx

    * 系统监控的工具包括Gnome-system-monitor、Top、htop、Atop、Sar、Dstat、Nmon、Pcp、Icinga、Nagios、Cacti、Glances、Conky等 系统监控的工具: * 综合监控工具:Gnome-system-monitor、Top、htop、Atop、Sar...

    中标麒麟Linux系统的性能与安全.pdf

    * 综合监控工具:Gnome-system-monitor、Top、htop、Atop、Sar、Dstat、Nmon、saidar * 网络监控工具:ip、nmap、tcpdump、wireshark、Sar、Vnstat、Traceroute、Iptstate、Darkstat * 本地视图:ip 工具、netstat、...

    一个hp unix的cpu监控,图形展现

    这种Web展示方式提供了远程监控的便利性,不论身处何处,只要有网络连接,都能实时了解服务器状态。"bridewell"可能利用了诸如PHP、Python、Perl等服务器端编程语言,以及JavaScript等客户端技术来实现交互式的图形...

    你需要知道的 16 个 Linux 服务器监控命令.pdf

    5. **nmon**:Nigel's Monitor是一款强大的性能监控工具,提供图形界面,可监控CPU、内存、磁盘I/O、网络等多个方面的性能数据。 6. **pmap**:报告每个进程的内存使用细节,用于检查是否存在内存消耗异常的进程。 ...

    Ubuntu Server - 权威网站和经典书籍

    另外,监控工具如`nmon`、`top`和`htop`帮助我们实时查看系统性能,而`logwatch`则能定期报告系统日志,便于故障排查。 对于初学者,推荐以下经典书籍: 1. 《Ubuntu Server Cookbook》:这是一本实践导向的指南,...

    IBM官方AIX认证指南中文教程

    AIX还提供了强大的系统管理工具,如HMC(Hardware Management Console)和IMC(Integrated Management Console),它们可以远程监控和管理多个AIX实例。此外,性能分析和调优也是管理员必备的技能,这包括使用...

    Linux +数据库面试题.pdf

    通过以上详细介绍,我们不仅掌握了 Linux 系统的基础操作、问题排查技巧,还深入了解了如何搭建测试环境以及使用 nmon 工具进行资源监控的方法。这些知识对于从事 IT 行业尤其是软件测试和开发工作的人员来说非常...

    自用自写的linux帮助文档

    对于系统监控,工具如`nmon`, `glances`和`systemd`的单位(units)也非常重要。 此外,理解Linux的文件系统结构(如`/bin`, `/usr`, `/etc`, `/var`等目录的作用),了解用户和组的概念,以及理解shell脚本编程...

    IBM内部培训AIX教学一些资料

    另外,`nmon`是一款实时性能监控工具,帮助管理员了解系统资源使用情况。 5. **网络配置**:AIX支持TCP/IP协议栈,管理员可以使用`ifconfig`, `route`, `nslookup`等命令进行网络配置。此外,`lanscan`命令用于列出...

    Linux课件关于服务器方面

    7. **进程管理**:理解守护进程(daemon)概念,掌握`ps`、`top`、`htop`等监控工具的使用,以及`start-stop-daemon`、`systemctl`等启动和停止服务的方法。 8. **Shell脚本编程**:学习Bash shell,编写自动化脚本...

    AIX操作系统(中文)

    `ps`命令用于查看进程状态,`kill`和`killall`用于终止进程,而`top`或`prstat`则提供实时性能监控。 ### 5. 网络配置与服务 AIX支持TCP/IP协议栈,网络配置主要通过`/etc/rc.net`脚本完成。`ifconfig`用于配置...

    linux服务器配置练习软件

    9. **监控与日志管理**:了解如何使用syslog收集和分析日志,以及使用工具如top、htop、iftop、nmon进行性能监控。 10. **自动化脚本**:bash脚本编写能力是Linux服务器管理的重要部分,可以实现日常任务的自动化。...

    从Windows转向Linux教程 V3.0(chm资料)

    学会使用ps、top、htop等命令查看和管理进程,以及使用iftop、nmon等工具监控系统性能,能有效提升系统管理能力。 十二、安全与防火墙 理解Linux下的用户权限模型(如sudo和su),并学习如何配置防火墙(如ufw或...

    linux使用(课件及整理)

    - 系统管理:`ps`查看进程,`kill`发送信号终止进程,`top`实时监控系统状态,`df`检查磁盘空间,`free`查看内存使用情况。 3. Linux系统管理 - 用户与组管理:`useradd`创建用户,`userdel`删除用户,`groupadd`...

    CentOS 系统配置 (各种服务配置 软件安装 )汇总

    - **Nmon**:更详细的系统监控工具。 9. **用户与组管理**: - `useradd`、`usermod`、`userdel`:添加、修改和删除用户。 - `groupadd`、`groupmod`、`groupdel`:对应处理用户组。 10. **文件系统管理**: -...

Global site tag (gtag.js) - Google Analytics