三 根据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打开即可。
相关推荐
除了`rpc.rstatd`,Linux还有其他监控工具,如`nmon`、`top`、`htop`、`iostat`、`vmstat`、`netstat`等,它们各自侧重不同的监控层面,可以根据实际需求组合使用。 总的来说,监控Linux系统是一项复杂但必要的任务...
17. **Nmon**:系统性能监控工具,提供CPU、内存、硬盘、网络等资源的实时监控。 18. **Strace**:系统调用跟踪工具,用于调试程序和分析系统问题。 以上只是部分常见的Linux管理工具,实际的“liunx管理工具.rar...
* 系统监控的工具包括Gnome-system-monitor、Top、htop、Atop、Sar、Dstat、Nmon、Pcp、Icinga、Nagios、Cacti、Glances、Conky等 系统监控的工具: * 综合监控工具:Gnome-system-monitor、Top、htop、Atop、Sar...
* 综合监控工具:Gnome-system-monitor、Top、htop、Atop、Sar、Dstat、Nmon、saidar * 网络监控工具:ip、nmap、tcpdump、wireshark、Sar、Vnstat、Traceroute、Iptstate、Darkstat * 本地视图:ip 工具、netstat、...
这种Web展示方式提供了远程监控的便利性,不论身处何处,只要有网络连接,都能实时了解服务器状态。"bridewell"可能利用了诸如PHP、Python、Perl等服务器端编程语言,以及JavaScript等客户端技术来实现交互式的图形...
5. **nmon**:Nigel's Monitor是一款强大的性能监控工具,提供图形界面,可监控CPU、内存、磁盘I/O、网络等多个方面的性能数据。 6. **pmap**:报告每个进程的内存使用细节,用于检查是否存在内存消耗异常的进程。 ...
另外,监控工具如`nmon`、`top`和`htop`帮助我们实时查看系统性能,而`logwatch`则能定期报告系统日志,便于故障排查。 对于初学者,推荐以下经典书籍: 1. 《Ubuntu Server Cookbook》:这是一本实践导向的指南,...
AIX还提供了强大的系统管理工具,如HMC(Hardware Management Console)和IMC(Integrated Management Console),它们可以远程监控和管理多个AIX实例。此外,性能分析和调优也是管理员必备的技能,这包括使用...
通过以上详细介绍,我们不仅掌握了 Linux 系统的基础操作、问题排查技巧,还深入了解了如何搭建测试环境以及使用 nmon 工具进行资源监控的方法。这些知识对于从事 IT 行业尤其是软件测试和开发工作的人员来说非常...
对于系统监控,工具如`nmon`, `glances`和`systemd`的单位(units)也非常重要。 此外,理解Linux的文件系统结构(如`/bin`, `/usr`, `/etc`, `/var`等目录的作用),了解用户和组的概念,以及理解shell脚本编程...
另外,`nmon`是一款实时性能监控工具,帮助管理员了解系统资源使用情况。 5. **网络配置**:AIX支持TCP/IP协议栈,管理员可以使用`ifconfig`, `route`, `nslookup`等命令进行网络配置。此外,`lanscan`命令用于列出...
7. **进程管理**:理解守护进程(daemon)概念,掌握`ps`、`top`、`htop`等监控工具的使用,以及`start-stop-daemon`、`systemctl`等启动和停止服务的方法。 8. **Shell脚本编程**:学习Bash shell,编写自动化脚本...
`ps`命令用于查看进程状态,`kill`和`killall`用于终止进程,而`top`或`prstat`则提供实时性能监控。 ### 5. 网络配置与服务 AIX支持TCP/IP协议栈,网络配置主要通过`/etc/rc.net`脚本完成。`ifconfig`用于配置...
9. **监控与日志管理**:了解如何使用syslog收集和分析日志,以及使用工具如top、htop、iftop、nmon进行性能监控。 10. **自动化脚本**:bash脚本编写能力是Linux服务器管理的重要部分,可以实现日常任务的自动化。...
学会使用ps、top、htop等命令查看和管理进程,以及使用iftop、nmon等工具监控系统性能,能有效提升系统管理能力。 十二、安全与防火墙 理解Linux下的用户权限模型(如sudo和su),并学习如何配置防火墙(如ufw或...
- 系统管理:`ps`查看进程,`kill`发送信号终止进程,`top`实时监控系统状态,`df`检查磁盘空间,`free`查看内存使用情况。 3. Linux系统管理 - 用户与组管理:`useradd`创建用户,`userdel`删除用户,`groupadd`...
- **Nmon**:更详细的系统监控工具。 9. **用户与组管理**: - `useradd`、`usermod`、`userdel`:添加、修改和删除用户。 - `groupadd`、`groupmod`、`groupdel`:对应处理用户组。 10. **文件系统管理**: -...