Linux性能监控(程序篇)
性能数据的监控,除了针对整机进行外,还要求我们对某一运行的程序单独进行。常用的程序监控命令有ps和top。
Ps
ps命令最常用的还是用于监控后台进程的工作情况,因为后台进程是不和屏幕键盘这些标准输入/输出设备进行通信的,所以假如需要检测其情况,便能够使用ps命令了。
ps是用来报告程序执行状况的指令,可以搭配kill指令随时中断,删除不必要的程序。
使用方式: ps [options] [--help]
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义。
参数 | 说明 |
---|---|
-A | 列出所有的程序 |
-w | 显示加宽可以显示较多的资讯 |
-au | 显示较详细的资讯 |
-aux | 显示所有包含其他使用者的进程 |
-e | 显示任何进程(此参数的效果和指定"A"参数相同) |
-f | 全格式(显示UID,PPIP,C与STIME栏位) |
-C | 指定执行指令的名称,并列出该指令的程序的状况 |
au(x)参数的输出格式:
参数 | 说明 |
---|---|
USER | 行程拥有者 |
PID | pid |
%CPU | 占用的 CPU 使用率 |
%MEM | 占用的内存使用率 |
VSZ | 占用的虚拟内存大小 |
RSS | 占用的物理内存大小 |
TTY | 终端的次要装置号码 (minor device number of tty) |
STAT | 该进程的状态: D: 不可中断的静止 (I/O 动作) R: 正在执行中 S: 静止状态 T: 暂停执行 Z: 不存在但暂时无法消除 W: 没有足够的记忆体分页可分配 <: 高优先序的行程 N: 低优先序的行程 L: 有记忆体分页分配并锁在记忆体内 (即时系统) |
START | 行程开始时间 |
TIME | 执行的时间 |
COMMAND | 所执行的指令 |
范例1
[work@jx-testing-ps1933.jx.baidu.com ~]$ ps PID TTY TIME CMD 24321 pts/0 00:00:00 bash 24414 pts/0 00:00:00 ps |
能够看到,显示的项目共分为四项,依次为PID(进程ID)、TTY(终端名称)、TIME(进程执行时间)、COMMAND(该进程的命令行输入)。
范例2
使用带有-ef 选项的ps,返回系统中所有用户的所有进程的完整列表。一般将此ps命令的结果传送到 grep 中,则该结果更易于查看。例如:
[work@jx-testing-ps1933.jx.baidu.com ~]$ ps -ef | grep work root 24316 2544 0 09:52 ? 00:00:00 sshd: work [priv] work 24320 24316 0 09:52 ? 00:00:00 sshd: work@pts/0 work 24321 24320 0 09:52 pts/0 00:00:00 -bash work 24416 24321 0 10:44 pts/0 00:00:00 ps -ef work 24417 24321 0 10:44 pts/0 00:00:00 grep work |
使用PS命令分析系统性能的方法主要有:
1)首先,根据用户ID寻找由同一用户执行的许多相似任务,这些任务很可能是因为用户运行的某个脚本程序在后台启动多个进程而造成的。
2)接下来,检查TIME域中各进程累计占用CPU的时间,如果有某个进程累计占用了大量的CPU时间,通常说明该进程可能陷入了无限循环,或该进程的某些逻辑出了错
3)找到那些已陷入死锁的进程ID后,就可以使用kill命令强制终止该进程了。
Top
top命令和ps命令的基本作用是相同的,显示系统当前的进程和其它状况;但是top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。如前台执行该命令,它将独占前台,直到用户终止该程序为止。比较准确的说,top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用、内存使用、执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。
top命令语法: top [-] [d delay] [q] [c] [S] [s] [i] [n]
参数 | 说明 |
---|---|
d | 指定更新的间隔,以秒计算 |
q | 没有任何延迟的更新。如果使用者有超级用户,则top命令将会以最高的优先序执行 |
c | 显示进程完整的路径与名称 |
S | 累积模式,会将己完成或消失的子行程的CPU时间累积起来 |
s | 安全模式 |
i | 不显示任何闲置(Idle)或无用(Zombie)的行程 |
n | 显示更新的次数,完成后将会退出top |
top命令的显示
[work@jx-testing-ps1933.jx.baidu.com ~]$ top top - 10:53:56 up 223 days, 16:04, 1 user, load average: 0.00, 0.00, 0.00 Tasks: 57 total, 1 running, 56 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0% us, 0.0% sy, 0.0% ni, 100.0% id, 0.0% wa, 0.0% hi, 0.0% si Mem: 8161244k total, 6548780k used, 1612464k free, 30500k buffers Swap: 0k total, 0k used, 0k free, 6419912k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 16 0 4752 544 452 S 0.0 0.0 0:01.88 init 2 root RT 0 0 0 0 S 0.0 0.0 0:22.27 migration/0 3 root 34 19 0 0 0 S 0.0 0.0 0:00.19 ksoftirqd/0 4 root RT 0 0 0 0 S 0.0 0.0 0:20.52 migration/1 5 root 34 19 0 0 0 S 0.0 0.0 0:00.22 ksoftirqd/1 6 root RT 0 0 0 0 S 0.0 0.0 0:18.87 migration/2 7 root 34 19 0 0 0 S 0.0 0.0 0:00.25 ksoftirqd/2 8 root RT 0 0 0 0 S 0.0 0.0 0:12.73 migration/3 9 root 34 19 0 0 0 S 0.0 0.0 0:00.23 ksoftirqd/3 10 root 5 -10 0 0 0 S 0.0 0.0 0:00.04 events/0 11 root 5 -10 0 0 0 S 0.0 0.0 0:00.03 events/1 12 root 5 -10 0 0 0 S 0.0 0.0 0:39.59 events/2 13 root 5 -10 0 0 0 S 0.0 0.0 0:00.00 events/3 14 root 5 -10 0 0 0 S 0.0 0.0 0:00.33 khelper 15 root 15 -10 0 0 0 S 0.0 0.0 0:00.00 kacpid 71 root 5 -10 0 0 0 S 0.0 0.0 0:00.00 kblockd/0 72 root 5 -10 0 0 0 S 0.0 0.0 0:00.00 kblockd/1 73 root 5 -10 0 0 0 S 0.0 0.0 0:00.00 kblockd/2 |
第一行表示的项目依次为当前时间、系统启动时间、当前系统登录用户数目、平均负载。
第二行显示的是所有启动的进程、目前运行的、挂起 (Sleeping)的和无用(Zombie)的进程。
第三行显示的是目前CPU的使用情况,包括系统占用的比例、用户使用比例、闲置(Idle)比例。
第四行显示物理内存的使用情况,包括总的可以使用的内存、已用内存、空闲内存、缓冲区占用的内存。
第五行显示交换分区使用情况,包括总的交换分区、使用的、空闲的和用于高速缓存的大小。
第六行显示的项目最多,下面列出了详细解释。
参数 | 说明 |
---|---|
PID(Process ID) | 进程标示号 |
USER | 进程所有者的用户名 |
PR | 进程的优先级别 |
NI | 进程的优先级别数值 |
VIRT | 进程占用的虚拟内存值 |
RES | 进程占用的物理内存值 |
SHR | 进程使用的共享内存值 |
S | 进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数 |
%CPU | 该进程占用的CPU使用率 |
%MEM | 该进程占用的物理内存和总内存的百分比 |
TIME+ | 该进程启动后占用的总的CPU时间 |
Command | 进程启动的启动命令名称,如果这一行显示不下,进程会有一个完整的命令行 |
top命令使用过程中,还可以使用一些交互的命令来完成其它参数的功能。这些命令是通过快捷键启动的。
命令 | 说明 |
---|---|
空格 | 立刻刷新 |
P | 根据CPU使用大小进行排序 |
T | 根据时间、累计时间排序 |
q | 退出top命令 |
m | 切换显示内存信息 |
t | 切换显示进程和CPU状态信息 |
c | 切换显示命令名称和完整命令行 |
M | 根据使用内存大小进行排序 |
W | 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法 |
Ctrl+L | 擦除并且重写屏幕 |
k | 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽 |
i | 忽略闲置和僵死进程。这是一个开关式命令 |
r | 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10 |
S | 切换到累计模式 |
s | 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加 |
f或者F | 从当前显示中添加或者删除项目 |
o或者O | 改变显示项目的顺序 |
l | 切换显示平均负载和启动时间信息 |
可以看到,top命令是一个功能十分强大的监控系统的工具,对于系统管理员而言尤其重要。但是,它的缺点是会消耗很多系统资源。
使用top命令也可以监视指定用户,缺省情况是监视所有用户的进程。如果想查看指定用户的情况,在终端中按“U”键,然后输入用户名,系统就会切换为指定用户的进程运行界面。