top
top命令能够显示出各项与系统和进程相关的信息,在运维、调试以及问题定位方面经常使用。
语法:
top -hv | -abcHimMsS -d delay -n iterations -p pid [, pid ...]
可以省略‘-’。这里仅介绍常用选项,更详细的信息可以参考manpage页面。
其中,
- h: 显示帮助信息。
- d:时延,表示top命令刷新页面结果的时间间隔,单位为s。默认为3s(可在启动界面按h显示)。
- H: 显示各线程信息。
- p: 只显示指定进程号的信息。
在调试某多线程的程序时,可以使用 top -Hp 进程号
。
在top命令启动后,在结果显示页面也可以进行命令交互。直接按h
可显示帮助信息。经常使用的几个命令如下:
- 1:显示各个cpu核心的使用信息。
- f: 弹出交互界面,可自定义排序目标(默认是以cpu%排序),增删要显示的信息等。
- H: 显示线程信息。
- k: 杀死某进程,会提示输入进程号(慎用,除非你确实需要)。
更多有趣内容可在帮助页面完成。
参数
本文主要介绍以下信息:
可以看到,整个界面分为两大部分,上半部分为统计信息,下半部分为各进程的详细信息。
在统计信息中:
-
第1行是队列任务信息,与
uptime
命令执行结果相同。- 分别显示系统当前时间、主机已开机运行总时间、用户连接数(活动用户数(who),不是用户数)、系统平均负载(统计最近1/5/15分钟的系统平均负载)
-
第2行进程信息:
- 包括总进程数、正在运行的进程数、睡眠的进程数、停止的进程数、僵尸进程数
-
第3行cpu信息(当显示每个cpu核的信息时,会有多行)
- us:用户空间所占CPU百分比(该行显示近100%时,提示进程可能进入死循环)
- sy:内核空间占用CPU百分比
- ni:用户进程空间内改变过优先级的进程占用CPU百分比
- id:空闲CPU百分比
- wa:等待输入输出的CPU时间百分比
- hi:硬件CPU中断占用百分比
- si:软中断占用百分比
- st:虚拟机占用百分比
-
第4行内存信息(类似于free命令)
- total:物理内存总量
- used:已使用的内存总量
- free:空闲的内存总量(free+used=total)
- buffers:用作内核缓存的内存量
-
第5行swap信息
- total:交换分区总量
- used:已使用的交换分区总量
- free:空闲交换区总量
- cached Mem:缓冲的交换区总量,内存中的内容被换出到交换区,然后又被换入到内存,但是使用过的交换区没有被覆盖,交换区的这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。
在进程信息中:
- PID:进程id
- USER:进程所有者的用户名
- PR:优先级
- NI:nice值。负值表示高优先级,正值表示低优先级
- VIRT:进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
- RES:进程使用的、未被换出的物理内存的大小
- SHR:共享内存大小
- S:进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
- %CPU:上次更新到现在的CPU时间占用百分比
- %MEM:进程使用的物理内存百分比
- TIME+:进程所使用的CPU时间总计,单位1/100秒
- COMMAND:命令名/行
(以下内容默认未显示,可通过设置显示)
- PPID:父进程id
- UID:进程所有者的id
- GROUP:进程所有者的组名
- TTY:启动进程的终端名。不是从终端启动的进程则显示为?
- P:最后使用的CPU,仅在多CPU环境下有意义
- TIME:进程使用的CPU时间总计,单位秒
- SWAP:进程使用的虚拟内存中被被换出的大小
- CODE:可执行代码占用的物理内存大小
- DATA:可执行代码以外的部分(数据段+栈)占用的物理内存大小
- nFLT:页面错误次数
- nDRT:最后一次写入到现在,被修改过的页面数
- WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名
- Flags:任务标志
前述内容说明,可以根据需要增删需要显示的各列信息,一般默认显示的信息已经足够。
小结
一般掌握常用的命令和信息即可,需要时再查看相关信息。