top
top命令可能是 Oracle DBA 在 Linux
上管理数据库时最有用的命令。如果系统很慢,您可能希望查看谁在占用所有 CPU 和/或内存。要显示最大进程,可以使用top命令。
注意,与其他命令不同,top不会产生输出,屏幕内容保持不变。它刷新屏幕以显示新信息。因此,如果您只执行top并保持屏幕一直开启,则屏幕始终显示最新信息。要停止并退出 shell,可以按下 Ctrl-C。
$ top
18:46:13 up 11 days, 21:50, 5 users, load average: 0.11, 0.19, 0.18
151 processes: 147 sleeping, 4 running, 0 zombie, 0 stopped
CPU states: cpu user nice system irq softirq iowait idle
total 12.5% 0.0% 6.7% 0.0% 0.0% 5.3% 75.2%
Mem: 1026912k av, 999548k used, 27364k free, 0k shrd, 116104k buff
758312k actv, 145904k in_d, 16192k in_c
Swap: 2041192k av, 122224k used, 1918968k free 590140k cached
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND
451 oracle 15 0 6044 4928 4216 S 0.1 0.4 0:20 0 tnslsnr
8991 oracle 15 0 1248 1248 896 R 0.1 0.1 0:00 0 top
1 root 19 0 440 400 372 S 0.0 0.0 0:04 0 init
2 root 15 0 0 0 0 SW 0.0 0.0 0:00 0 keventd
3 root 15 0 0 0 0 SW 0.0 0.0 0:00 0 kapmd
4 root 34 19 0 0 0 SWN 0.0 0.0 0:00 0 ksoftirqd/0
7 root 15 0 0 0 0 SW 0.0 0.0 0:01 0 bdflush
5 root 15 0 0 0 0 SW 0.0 0.0 0:33 0 kswapd
6 root 15 0 0 0 0 SW 0.0 0.0 0:14 0 kscand
8 root 15 0 0 0 0 SW 0.0 0.0 0:00 0 kupdated
9 root 25 0 0 0 0 SW 0.0 0.0 0:00 0 mdrecoveryd
... output snipped ...
让我们来看看产生的不同类型的信息。第一行:
18:46:13 up 11 days, 21:50, 5 users, load average: 0.11, 0.19, 0.18
显示当前时间 (18:46:13),该系统已经运行了 11 天;并且已经工作了 21 小时 50 秒。后面显示的分别是最近 1、5、15
分钟的系统平均负载 (0.11、0.19、0.18)。(顺便提一下,您也可以通过执行uptime命令来获得这些信息。)
如果不需要平均负载,按下字母 "l"(小写字母 L);它将关闭。要再次将其打开,按下 l。第二行:
151 processes: 147 sleeping, 4 running, 0 zombie, 0 stopped
显示进程数、运行的进程数、休眠的进程数等。第三行和第四行:
CPU states: cpu user nice system irq softirq iowait idle
total 12.5% 0.0% 6.7% 0.0% 0.0% 5.3% 75.2%
显示 CPU 利用率的详细信息。上面一行显示用户进程占用了 CPU 的 12.5%,系统占用了 6.7%。用户进程中包括 Oracle 进程。按下 "t"
可以关闭和打开这三行。如果有多个 CPU,屏幕将在每行显示一个 CPU 的信息。
接下来的两行:
Mem: 1026912k av, 1000688k used, 26224k free, 0k shrd, 113624k buff
758668k actv, 146872k in_d, 14460k in_c
Swap: 2041192k av, 122476k used, 1918716k free 591776k cached
显示可用的和已利用的内存。内存总量为 "1026912k av"(大约 1GB),其中只有 26224k(即 26MB)是可用的。交换空间为
2GB;但几乎并未使用。要关闭和打开这两行,可以按下 "m"。
其余的显示内容以表格格式显示进程。下面对各列进行解释:
列 | 描述 |
PID | 进程的进程 ID |
USER | 运行该进程的用户 |
PRI | 进程的优先级 |
NI | nice 值:该值越高,任务的优先级越低 |
SIZE | 该进程使用的内存(代码+数据+堆栈) |
RSS | 该进程使用的物理内存 |
SHARE | 该进程使用的共享内存 |
STAT | 该进程的状态,用代码显示。一些主要的状态代码包括: R — 正在运行 S — 正在休眠 Z — 迟滞 T — 已停止 您还会看到第二个和第三个字符,它们表示: W — 已换出的进程 N — 正 nice 值 |
%CPU | 该进程使用的 CPU 百分比 |
%MEM | 该进程使用的内存百分比 |
TIME | 该进程使用的总 CPU 时间 |
CPU | 如果这是一个多处理器系统,该列指明正在其上运行进程的 CPU 的 ID。 |
COMMAND | 该进程发出的命令 |
显示top时,您可以按几个键来设置希望的显示格式。按下大写字母 M
键可根据内存使用情况对输出进行排序。(注意,使用小写字母 m
将在显示屏的顶部打开或关闭内存汇总行。)当您希望了解谁在占用内存时,该键非常有用。示例输出如下:
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND
31903 oracle 15 0 75760 72M 72508 S 0.0 7.2 0:01 0 ora_smon_PRODB2
31909 oracle 15 0 68944 66M 64572 S 0.0 6.6 0:03 0 ora_mmon_PRODB2
31897 oracle 15 0 53788 49M 48652 S 0.0 4.9 0:00 0 ora_dbw0_PRODB2
既然您了解了如何解释输出,我们来看看如何使用命令行参数。
最有用的参数是 -d,它指示两次屏幕刷新之间的延迟。要每秒刷新一次,则使用top -d
1。
另一个有用的选项是 -p。如果您希望只监视几个进程而并非全部,可以在 -p 选项后指定这几个进程。要监视进程 13609、13608 和
13554,执行以下命令:
top -p 13609 -p 13608 -p 13554