监控使用内存或CPU前十名进程脚本(文末附有sort和top命令详解)
一、监控目的
掌握系统进程对系统资源的使用情况,掌握机器动态
二、监控方法
1、监控命令:
ps(静态)
top(动态)
2、监控方法
通过对任务管理器中的进程对内存或CPU的使用情况进行整合,排序得出结论
三、监控实现
[root@CentOs shell]# cat memory_cpu_use_top10.sh
#! /bin/bash
#统计系统中前十名使用内存最多的进程
memory(){
#1、收集任务管理器进程信息
temp_file=`mktemp memory.XXX`
top -b -n 1 > $temp_file
#或者 ps aux > $temp_file(两种方法选一个)
#2、按进程统计内存使用大小
#tail -n +2 $temp_flime |awk '{array[$11]+=$6}END{for (i in array) print array[i],i}' |sort -k 1 -n -r|head -10
tail -n +8 $temp_file |awk '{array[$NF]+=$6}END{for (i in array) print array[i],i}' |sort -k 1 -n -r|head -10
rm -rf $temp_file
}
#统计系统中前十名使用CPU最多的进程
cpu(){
#1、收集任务管理器进程信息
temp_file=`mktemp memory.XXX`
top -b -n 1 > $temp_file
#或者 ps aux > $temp_file(两种方法选一个)
#2、按进程统计cpu使用大小
#tail -n +2 $temp_flime |awk '{array[$11]+=$6}END{for (i in array) print array[i],i}' |sort -k 1 -n -r|head -10
tail -n +8 $temp_file |awk '{array[$NF]+=$9}END{for (i in array) print array[i],i}' |sort -k 1 -n -r|head -10
rm -rf $temp_file
}
echo memory
memory
echo cpu
cpu
[root@CentOs shell]#
附:
一、sort命令
1、sort的定义:
sort将文件的每一行作为一个单位相互比较,比较原则是从首字符向后依次按ASCII码进行比较,最后将它们按升序输出。
2、选项
(1)-u:在输出行中排序并去除重复行。
(2)-r:逆序排序。
说明:sort默认的排序方式是升序的,如果想改成降序,就需要加个-r。
(3)-o:将排序结果写入文件中。
说明:由于sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile。但是,如果你想把排序结果输出到原文件中,用重定向就不行了。
如:sort -r file3 -o file3
(4)-n:按数值排序。
说明:如果按字符排序,当10与2比较时,排序程序会先比较1和2,这样就会出现10放在2前面的情况。所以,最好指明排序的方式。
(5)sort的-t选项和-k选项:
命令格式:sort -t ‘分隔符’ -k ‘指定列数’
如:
sort -nt ';' -k 3 file3(以“;”作为分隔符,对第三列进行数值排序)
二、top命令
1,相当于Windows下的资源管理器,能够动态实时的显示系统中进程的资源占用情况
2、在Linux终端上输入top命令出现的结果及其表示的含义如下图:
3、top命令常用的选项参数有:
选项 | 功能 |
-d | 指定每两次屏幕信息刷新之间的时间间隔,如希望每秒刷新一次,则使用:top -d 1(默认5秒) |
-p | 通过指定PID来仅仅监控某个进程的状态(如:top -p 1 查看进程号为1的进程) |
-S | 指定累计模式 |
-s | 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险 |
-i | 使top不显示任何闲置或者僵死的进程 |
-c |
显示整个命令行而不只是显示命令名 |
top -b p 2>/tmp/top.txt 表示将top进程表在/tmp/top.txt中打印两次。
-q top没有任何延迟时间的进行刷新。如果调用程序有超级用户权限,top将会以尽可能高的优先级运行。