top 命令
top
用于交互查看进程和系统相关属性信息,默认为 3 秒刷新一次。
[root@xuegod63 ~]# top #top 弹出的每行信息含意如表 10-2 所示。
第一行内容和 uptime 弹出的信息一样。
进程和 CPU 的信息( 第二、三行),如图 10-8 所示。
图 10-8 进程和 CPU 的信息
1. 当有多个 CPU 时,这些内容可能会超过两行,内容如表 10-2 所示。
Tasks: 481 total | 进程总数 |
1 running | 正在运行的进程数 |
480 sleeping | 睡眠的进程数 |
0 stopped | 停止的进程数 |
0 zombie | 僵尸进程数 |
Cpu(s): 0.0% us | 系统用户进程使用CPU百分比。 |
0.0% sy | 内核中的进程占用CPU百分比 |
0.0% ni | 用户进程空间内改变过优先级的进程占用CPU百分比 |
98.7% id | 空闲CPU百分比 |
0.0% wa |
cpu等待I/0完成的时间总量。 测试: 终端1:执行:top 终端2:dd if=/dev/zero of=/a.txt count=10 bs=100M 终端3:dd if=/dev/zero of=/a.txt count=10 bs=100M 如下: |
0.0% hi(了解) 硬中断消耗时间 |
硬中断,占的CPU百分比。1. 硬中断是由硬件产生的,比如,像磁盘,网卡,键盘,时钟等。每个设备或设备集都有它自己的IRQ(中断请求)。基于IRQ,CPU可以将相应的请求分发到对应的硬件驱动上(注:硬件驱动通常是内核中的一个子程序,而不是一个独立的进程)。# hi -> Hardware IRQ: The amount of time the CPU has been servicing hardware interrupts. |
0.0% si(了解) 软中断消耗时间 |
软中断,占的CPU百分比。1. 通常,软中断是一些对I/O的请求。这些请求会调用内核中可以调度I/O发生的程序。对于某些设备,I/O请求需要被立即处理,而磁盘I/O请求通常可以排队并且可以稍后处理。根据I/O模型的不同,进程或许会被挂起直到I/O完成,此时内核调度器就会选择另一个进程去运行。I/O可以在进程之间产生并且调度过程通常和磁盘I/O的方式是相同。# si -> Software Interrupts.: The amount of time the CPU has been servicingsoftware interrupts. |
0.0 st (steal 偷) | st:虚拟机偷取物理的时间。比如:物理机已经运行了KVM,XEN虚拟机。KVM虚拟机占用物理机的cpu时间 |
图 10-8 进程和 CPU 的信息
2. 内存信息(第四五行),如图 10-9 所示。
图 10-9 内存信息
内容如表 10-3 所示 。
Mem: 2033552k total |
物理内存总量。 |
340392k used |
使用的物理内存总量。 |
1376636k free |
空闲内存总量。 |
316524k buff/cache |
用作内核缓存的内存量。 和 free -k 一个意思。 |
Swap: 2017948k total |
交换区总量。 |
0k used |
使用的交换区总量。 |
192772k free |
空闲交换区总量。 |
1518148 avail Mem | 总的可利用内存是多少。 |
表 10-3 内存信息表
注:如果 swap 分区,被使用,那么你的内存不够用了。
3. 第 7 行进程信息,如图 10-10 所示。
图 10-10 进程相关
相关含意如表 10-4 所示。
列名 | 含义 |
PID | 进程 id。 |
USER | 进程所有者的用户名。 |
PR | 优先级(由内核动态调整),用户不能。 |
NI |
进程优先级。 nice 值。负值表示高优先级,正值表示低优先级,用户可以 自己调整。 |
VIRT(virtual memory usage) |
虚拟内存,是进程正在使用的所有内存(ps 中标为 VSZ)。 VIRT:virtual memory usage 虚拟内存。 1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等。 2、假如进程申请 100m 的内存,但实际只使用了 10m,那么它会增长 100m,而不是实际的使用量。 |
RES(resident memory usage) |
是进程所使用的物理内存。实际实用内存(ps 中标为 RSS)。 RES:resident memory usage 常驻内存。 1、进程弼前使用的内存大小,但不包括 swap out。 2、包含其他进程的共享。 3、如果申请 100m 的内存,实际使用 10m,它只增长 10m,不 VIRT 相反。 4、关于库占用内存的情况,它只统计加载的库文件所占内存大小。 |
SHR |
共享内存大小,单位 kb。 SHR:shared memory 共享内存。 1、除 M 了自身进程的共享内存,也包括其他进程的共享内存。 2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小。 3、计算某个进程所占的物理内存大小公式:RES – SHR。 4、swap out 后,它将会降下来。 |
S | 进程状态。
D=不可中断的睡眠状态。 R=运行中或可运行。 S=睡眠中。 T=已跟踪/已停止。 Z=僵停。 |
%CPU | 上次更新到现在的 CPU 时间占用百分比。 |
%MEM | 进程使用的物理内存百分比。 |
TIME+ | 进程使用的 CPU 时间总计,单位 1/100 秒。 |
COMMAND | 命令名/命令行。 |
表 10-4 进程信息表
top 快捷键:
(1) 默认 3s 刷新一次,按 s 修改刷新时间。
(2) 按空格:立即刷新。
(3) q 退出。
(4) P:按 CPU 排序。
(5) M:按内存排序。
(6) T 按时间排序。
(7) p:进程 IP,查看某个进程状态。
(8) 数字键 1:显示每个内核的 CPU 使用率。
(9) u/U:指定显示的用户。
(10) h:帮助。
例 10.5:使用 top 动态只查看某个或某些进程的信息。
找到进程 ID
[root@localhost ~]# ps -axu | grep vim
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/
root 9667 0.0 0.2 143620 3344 pts/1 S<+ 19:15 0:00 vim a.txt
[root@localhost ~]# top -p 9667 #通过 ps -axu | grep vim 命令得知其他 PID,可以使用 -p 选项直接指定其 PID 进行查看。