linux基础-第十一单元 系统监控
第十一单元 系统监控
系统监视和进程控制工具—top和free
top命令的功能
TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定.
top - 12:38:33 up 50 days, 23:15, 7 users, load average: 60.58, 61.14, 61.22
Tasks: 203 total, 60 running, 139 sleeping, 4 stopped, 0 zombie
Cpu(s) : 27.0%us, 73.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1939780k total, 1375280k used, 564500k free, 109680k buffers
Swap: 4401800k total, 497456k used, 3904344k free, 848712k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4338 oracle 25 0 627m 209m 207m R 0 11.0 297:14.76 oracle
4267 oracle 25 0 626m 144m 143m R 6 7.6 89:16.62 oracle
3458 oracle 25 0 672m 133m 124m R 0 7.1 1283:08 oracle
3478 oracle 25 0 672m 124m 115m R 0 6.6 1272:30 oracle
3395 oracle 25 0 672m 122m 113m R 0 6.5 1270:03 oracle
3480 oracle 25 0 672m 122m 109m R 8 6.4 1274:13 oracle
3399 oracle 25 0 672m 121m 110m R 0 6.4 1279:37 oracle
4261 oracle 25 0 634m 100m 99m R 0 5.3 86:13.90 oracle
25737 oracle 25 0 632m 81m 74m R 0 4.3 272:35.42 oracle
7072 oracle 25 0 626m 72m 71m R 0 3.8 6:35.68 oracle
16073 oracle 25 0 630m 68m 63m R 8 3.6 175:20.36 oracle
16140 oracle 25 0 630m 66m 60m R 0 3.5 175:13.42 oracle
16122 oracle 25 0 630m 66m 60m R 0 3.5 176:47.73 oracle
786 oracle 25 0 627m 63m 63m R 0 3.4 1:54.93 oracle
4271 oracle 25 0 627m 59m 58m R 8 3.1 86:09.64 oracle
4273 oracle 25 0 627m 57m 56m R 8 3.0 84:38.20 oracle
22670 oracle 25 0 626m 50m 49m R 0 2.7 84:55.82 oracle
一. TOP前五行统计信息
统计信息区前五行是系统整体的统计信息。
1. 第一行是任务队列信息
同 uptime 命令的执行结果:
[root@localhost ~]# uptime
13:22:30 up 8 min, 4 users, load average: 0.14, 0.38, 0.25
其内容如下:
12:38:33 | 当前时间 |
up 50days | 系统运行时间,格式为时:分 |
1 user | 当前登录用户数 |
load average: 0.06, 0.60, 0.48 | 系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。 |
2. 第二、三行为进程和CPU的信息
当有多个CPU时,这些内容可能会超过两行。内容如下:
Tasks: 29 total | 进程总数 |
1 running | 正在运行的进程数 |
28 sleeping | 睡眠的进程数 |
0 stopped | 停止的进程数 |
0 zombie | 僵尸进程数 |
Cpu(s): 0.3% us | 用户空间占用CPU百分比 |
1.0% sy | 内核空间占用CPU百分比 |
0.0% ni | 用户进程空间内改变过优先级的进程占用CPU百分比 |
98.7% id | 空闲CPU百分比 |
0.0% wa | 等待输入输出的CPU时间百分比 |
0.0% hi | |
0.0% si |
3. 第四五行为内存信息。
内容如下:
Mem: 191272k total | 物理内存总量 |
173656k used | 使用的物理内存总量 |
17616k free | 空闲内存总量 |
22052k buffers | 用作内核缓存的内存量 |
Swap: 192772k total | 交换区总量 |
0k used | 使用的交换区总量 |
192772k free | 空闲交换区总量 |
123988k cached | 缓冲的交换区总量。 内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖, 该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入。 |
二. 进程信息
列名 | 含义 |
PID | 进程id |
PPID | 父进程id |
RUSER | Real user name |
UID | 进程所有者的用户id |
USER | 进程所有者的用户名 |
GROUP | 进程所有者的组名 |
TTY | 启动进程的终端名。不是从终端启动的进程则显示为 ? |
PR | 优先级 |
NI | nice值。负值表示高优先级,正值表示低优先级 |
P | 最后使用的CPU,仅在多CPU环境下有意义 |
%CPU | 上次更新到现在的CPU时间占用百分比 |
TIME | 进程使用的CPU时间总计,单位秒 |
TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
%MEM | 进程使用的物理内存百分比 |
VIRT | 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES |
SWAP | 进程使用的虚拟内存中,被换出的大小,单位kb。 |
RES | 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA |
CODE | 可执行代码占用的物理内存大小,单位kb |
DATA | 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb |
SHR | 共享内存大小,单位kb |
nFLT | 页面错误次数 |
nDRT | 最后一次写入到现在,被修改过的页面数。 |
S | 进程状态。 D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 |
COMMAND | 命令名/命令行 |
WCHAN | 若该进程在睡眠,则显示睡眠中的系统函数名 |
Flags | 任务标志,参考 sched.h |
详细参考:
http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316399.html
top命令显示结果中一些常用状态信息的具体含义
free命令的功能
参数讲解
bash-3.00$ free
total used free shared buffers cached
Mem: 1572988 1509260 63728 0 62800 277888
-/+ buffers/cache: 1168572 404416
Swap: 2096472 16628 2079844
Mem:表示物理内存统计
total:表示物理内存总量(total = used + free)
used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
free:未被分配的内存。
shared:共享内存,一般系统不会用到,这里也不讨论。
buffers:系统分配但未被使用的buffers 数量。
cached:系统分配但未被使用的cache 数量。
计算已经使用的内存
-/+ buffers/cache:表示物理内存的缓存统计
used2:也就是第一行中的used – buffers-cached 也是实际使用的内存总量。 //used2为第二行
free2= buffers1 + cached1 + free1 //free2为第二行、buffers1等为第一行
free2:未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。
Swap:表示硬盘上交换分区的使用情况,这里我们不去关心。
系统的总物理内存:255268Kb(256M),但系统当前真正可用的内存b并不是第一行free 标记的 16936Kb,它仅代表未被分配的内存。
计算未使用的 buffers/cache
buffers与cached的区别
A buffer is something that has yet to be “written” to disk. A cache is something that has been “read” from the disk and stored for later use
对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
所以从应用程序的角度来说 可用内存=系统free memory+buffers+cached.
buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages.
cached是用来给文件做缓冲。
系统中进程的监控—ps
什么是进程
什么是守护进程
什么是父进程、子进程
ps命令的功能
[root@study ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19232 1592 ? Ss 14:27 0:00 /sbin/init
root 2 0.0 0.0 0 0 ? S 14:27 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 14:27 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S 14:27 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S 14:27 0:00 [stopper/0]
root 6 0.0 0.0 0 0 ? S 14:27 0:00 [watchdog/0]
root 7 0.0 0.0 0 0 ? S 14:27 0:08 [events/0]
root 8 0.0 0.0 0 0 ? S 14:27 0:00 [cgroup]
root 9 0.0 0.0 0 0 ? S 14:27 0:00 [khelper]
root 10 0.0 0.0 0 0 ? S 14:27 0:00 [netns]
root 11 0.0 0.0 0 0 ? S 14:27 0:00 [async/mgr]
root 12 0.0 0.0 0 0 ? S 14:27 0:00 [pm]
root 13 0.0 0.0 0 0 ? S 14:27 0:00 [sync_supers]
root 14 0.0 0.0 0 0 ? S 14:27 0:00 [bdi-default]
root 15 0.0 0.0 0 0 ? S 14:27 0:00 [kintegrityd/0]
#查看进程号
[root@study test1]# ps aux|grep 'init'
root 1 0.0 0.0 19232 1512 ? Ss 14:27 0:00 /sbin/init
root 1427 0.0 0.0 103264 844 pts/0 S+ 17:18 0:00 grep init
#过滤掉自己
[root@study test1]# ps aux|grep 'init'|grep -v 'grep'
root 1 0.0 0.0 19232 1512 ? Ss 14:27 0:00 /sbin/init
#运行程序
firefox
#把程序放在后台运行
firefox &
#查看后台运行的程序
jobs
#把程序调到前端运行 %工作号,后台程序调到前台运行。
fg %1
#过滤出firefox,再过滤掉自己
ps aux|grep 'firefox' |grep -v 'grep'
#直接在后台运行
bg %1
#查看程序的PID
[root@study ~]# ps aux |grep bash
root 1512 0.0 0.0 108316 1812 pts/0 Ss 17:40 0:00 -bash
root 1586 0.0 0.0 103260 840 pts/0 S+ 18:01 0:00 grep bash
[root@study ~]# pgrep 'bash'
1512 #pid
系统中进程的监控—pstree、kill、pkill、pgrep
pstree命令的功能
pstree命令的用法举例
kill命令的功能
kill命令的用法举例
kill -9
pkill、pgrep命令的功能
ps:
[root@localhost ~]# ps -ef|grep init
root 1 0 0 Nov02 ? 00:00:00 init [3]
root 17563 17534 0 17:37 pts/1 00:00:00 grep init
#强制杀死程序的进程号
[root@localhost ~]# kill -9 1
#以树状图显示进程间的关系
[root@study test1]# pstree
init─┬─crond
├─dhclient
├─login───bash
├─5*[mingetty]
├─rsyslogd───3*[{rsyslogd}]
├─sshd───sshd───bash───pstree
└─udevd───2*[udevd]
查看bash进程树
[root@study ~]# pstree |grep bash
|-login---bash
|-sshd---sshd---bash-+-grep
课后作业
【本节内容】
1. 系统监视和进程控制工具—top和free(详见linux系统管理P357)
1) 掌握top命令的功能:top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。
2) 了解使用top命令列出系统状态时,系统默认每5秒刷新一下屏幕上的显示结果。
3) 掌握free命令的功能:显示内存的使用状态。
2. 系统中进程的监控—ps(详见linux系统管理P363)
1) 掌握进程的定义:进程是程序的一次动态执行。
2) 掌握守护进程的定义:守护进程是在后台运行并提供系统服务的一些进程。
3) 掌握父进程、子进程的定义:当一个进程创建另一个进程时,第1个进程被称为新进程的父进程,而新进程被称为子进程。
4) 掌握ps命令的功能:用来显示当前进程的状态。
Ps –aux 显示所有的与用户相关的完整信息
系统中进程的监控—pstree、kill(详见linux系统管理P366)
1) 掌握pstree命令的功能:以树状图显示程序。
2) 掌握pstree命令的用法举例:
例如:列出PID为4729的进程的进程状态树的命令:pstree 4729
3) 掌握kill命令的功能:把一个信号发送给一个或多个进程。默认发送终止信号。
4) 灵活应用kill命令终止进程
例如:终止PID为3852的进程的命令:kill 3852
5) 灵活应用kill -9命令杀死进程
例如:杀死PID为3906的进程的命令:kill -9 3906
3. 掌握pgrep命令的功能:通过名称或其他属性查找进程
例如:查找名为firefox的进程的命令为:pgrep firefox
4. 掌握pkill命令的功能:通过名称或其他属性发信号给进程
例如:杀死名为firefox的进程的命令为:pkill firefox
5. 课后作业(用时30分钟)
1) 实时动态监控系统状态
top
2) 退出上一步的操作
q
3) 开启top进程
[root@study ~]# top
top - 18:21:33 up 3:54, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 68 total, 1 running, 67 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, 0.0%st
Mem: 1906492k total, 108428k used, 1798064k free, 9232k buffers
Swap: 2047996k total, 0k used, 2047996k free, 32136k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 19232 1592 1300 S 0.0 0.1 0:00.62 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.01 ksoftirqd/0
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0
6 root RT 0 0 0 0 S 0.0 0.0 0:00.02 watchdog/0
7 root 20 0 0 0 0 S 0.0 0.0 0:09.65 events/0
4) 使用ps命令查看top命令的pid并杀死
[root@study ~]# ps aux|grep 'top'|grep -v 'grep'
root 5 0.0 0.0 0 0 ? S 14:27 0:00 [stopper/0]
[root@study ~]# pkill -9 5
5) 查看pid为2的进程的进程树
[root@study ~]# pstree 2
kthreadd─┬─aio/0
├─async/mgr
├─ata_aux
├─ata_sff/0
├─bdi-default
├─cgroup
├─crypto/0
├─deferwq
├─events/0
├─2*[ext4-dio-unwrit]
后面部分省略
6) 打开火狐浏览器
firefox
7) 查找名为firefox的进程
[root@study ~]# ps aux|grep firefix
root 1630 0.0 0.0 103260 836 pts/0 S+ 18:18 0:00 grep firefix
8) 杀死名为firefox的进程
kill -9 1630