一 top简介
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程(级别)的资源占用状况,类似于Windows的任务管理器。
top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按键来不断刷新当前状态,如果在前台执行该命令,它将独占前台,直到用户终止该程序为止。 比较准确的说,top命令提供了实时的对系统处理器的状态监视,它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用、内存使用、执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。
二 实战
--- '语法格式' ---
top [options] [d <间隔秒数>] [n <执行次数>]
默认'每5秒'更新一次,默认是以'CPU排序'的
top '不需要加其它参数'
1)第一行信息解释
top '系统当前时间'
up 系统已'开机多长时间' --> '在这期间没有重启过'
user 系统当前'用户数'
load average 'cpu平均负载',三个数值分别为,1分钟,5分钟,15分钟
需求:查看工作负载的其它方式
2)第二行信息解释
Tasks total:'总进程数',running:'正在运行的进程数',sleeping:'睡眠的进程数',stopped:'停止的进程数',zombie:'僵尸进程数'
'1: 找出僵尸进程' --> '看到有标记为Z的进程就是僵尸进程'
ps -ef|grep defunc
ps -e -o stat,ppid,pid,cmd|egrep '^[Zz]'
'2: 清理该进程的父进程'
kill -9 PPID
'3: 综合方式'
kill -9 `ps -ef |grep "Process Name" | awk '{ print $3 }'`
其中"ProcessName"为处于'zombie状态'的进程名
僵尸进程清理原理
可采用'终止其父进程'的方法,'父进程死后',僵尸进程成为"孤儿进程",过继给'1号进程init',init始终会'负责清理僵尸进程'.它产生的所有僵尸进程也跟着消失
备注:清理之后'注意验证'
3)第三行的信息解释
'CPU的使用情况'
us '用户空间'占用CPU百分比
sy '内核空间'占用CPU'百分比'
ni 用户进程空间内改变过优先级的进程占用CPU百分比
id '空闲CPU百分比'
wa 等待输入输出的CPU时间百分比
hi 硬件CPU中断占用百分比
si 软中断占用百分比
st 虚拟机占用百分比
这里CPU的使用比率和windows概念不同,要理解'用户空间'和'内核空间'
4)第四行的信息解释
Mem:
total '物理内存总量'
used '使用的'物理内存总量
free '空闲'内存总量
buffer/cache 用作'内核缓存的内存量'
5)第五行的信息解释
Swap:
total '交换区总量'
used '使用的'交换区总量
avail ''
说明:内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。
'该参数了解即可' --> 如果配置了,那末如果参数有数值,就要'注意了'
6)各进程的状态监控
PID: '进程ID',进程的唯一标识符
USER:'进程所有者的'实际用户名
PR:进程的'调度优先级'。这个字段的一些值是'rt',这意味这这些进程'运行在实时态'
NI:进程的'nice值'(优先级),'越小的值'意味着'越高的优先级';负值表示高优先级,正值表示低优先级
VIRT:进程使用的'虚拟内存',进程使用的虚拟内存总量,'单位kb'。VIRT=SWAP+RES
RES:'驻留内存大小',驻留内存是任务使用的'非交换物理内存大小',进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR:SHR是进程使用的'共享内存',共享内存大小,单位kb
S:这个是'进程的状态',它有以下不同的值:
D - 不可中断的'睡眠态'
R – 运行态
S – 睡眠态
T – 被跟踪或已停止
Z – '僵尸态'
%CPU:自从'上一次更新时'到'现在任务'所使用的CPU时间百分比
%MEM:进程使用的可用'物理内存百分比'
TIME+:任务启动后到现在所使用的'全部CPU时间',精确到百分之一秒。
COMMAND:'运行进程所使用的命令',进程名称(命令名/命令行)
还有许多在'默认情况下'不会显示的输出,它们可以显示进程的页错误、有效组和组ID和其他更多的信息
后续:ps定制输出
7)排序
P:以'CPU的使用资源'排序显示 --> '默认'
M:以'内存的使用资源'排序显示 --> 'shift+m'
N:以'pid排序'显示
T:由'进程使用的时间'累计排序显示
8)top本身的命令行参数
top 每隔'5秒'显式所有进程的资源占用情况
top -d 2 每隔'2秒'显式所有进程的资源占用情况
top -c 每隔5秒显式进程的资源占用情况,并显示'进程的命令行参数'(默认只有进程名)
top -p 123456 -p 6789 每隔5秒显示pid是123456和pid是789的两个'进程的资源占用情况'
top -d 2 -c -p 123456 每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数'掌握'
9)top的交互式
在top基本视图中,按键盘数字'1'可以监控'每个逻辑CPU的状况-->每个线程'
键盘'b'(打开关闭加亮效果) --> '运行态进程加亮' --> '横拍'
敲击键盘'x'(打开/关闭'排序列'的加亮效果)
其它方式: 可以按"shift+>"或者"shift+<"左右'改变排序序列'
'这个比较重要'
需求: 指定仅显示'某个用户的进程' --> 'top --> u -->输入用户'
c: 切换显示'命令名称和完整命令行' --> 'top --> c'
h或者? 显示'帮助画面',给出一些'简短的命令总结'说明
k '终止(kill)一个进程',系统将'提示用户输入'需要'终止的进程PID',以及需要'发送给该进程什么样的信号'。
一般的终止进程可以'使用15信号';如果'不能正常结束'那就使用'信号9强制结束'该进程。默认值是信号15,在'安全模式'中此命令'被屏蔽'
i '忽略闲置和僵死进程',这是一个'开关式'命令。
q 退出程序
r 重新'安排一个进程的优先级别',系统提示用户输入需'要改变的进程PID'以及需要设置的'进程优先级值'。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权,默认值是10
S 切换到'累计模式?'
s 改变'两次刷新之间的延迟时间',系统将提示用户输入新的时间,'单位为s'。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5s。需要'注意的是'如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
o或者O 改变显示'项目的顺序'
l '不显示'平均负载和启动时间信息
m 切换显示'内存信息' --> '了解'
t 切换显示'进程和CPU状态信息' -->'了解'
W 将当前设置'写入~/.toprc文件中',这是写top配置文件的'推荐'方法
10)改变进程显示字段
'top' --> 'f' --> '进入如下的视图'
f或者F 从当前显示中'添加或者'删除项目
用'上下键选择选项',按下'空格键'可以决定是'否在'基本视图中'显示这个选项'
后续
top命它'监控的最小单位是进程',如果想'监控更小单位时(线程)',就需要用到'ps或者netstate命令'来满足我们的要求