1 top命令
1.1 简介
top命令是Linux下常用的性能分析工具,top程序提供了一个运行系统的动态实时视图。它可以显示系统摘要信息,以及当前由Linux内核管理的进程或线程的列表。所显示的系统摘要信息的类型以及进程信息的类型、顺序和大小都是用户可配置的,并且该配置可以在重启后保持不变。
1.2 说明
使用:top -hv | -bcEeHiOSs1 -d secs -n max -u|U user -p pid(s) -o field -w [cols]
1、操作
第一次使用top命令时,会出现三个区域:摘要区域、字段/列标题、任务区域;在摘要区域和列标题之间空白行为输入区域。
有两个重要的操作键:h和?(两个都是用于显示帮助信息,如下:),按q退出帮助页面
在top输出中,几个常用的快捷键:
- ^z:暂停top
- fg:恢复top
- Up 调用旧的字符串进行重新编辑
- Down 调用新的字符串或删除整行
- Insert 切换插入和覆盖模式
- Delete 删除光标处的字符,其他字符向左移动
- Home 跳转到输入行的开头
- End 跳转到输入行的末尾
2、命令行选项
命令行选项:
- -b:以批处理模式,非交互式
- -c:显示完整的命令行,而不仅仅是命令名。
- -C:在累积模式下运行,用于报告过去一段时间内的CPU使用情况。
- -d:指定每两次屏幕信息刷新之间的时间间隔。也可以使用s交互命令来改变这个值
- -e:强制任务内存缩放为:-e k | m | g | t | p
- -E k | m | g | t | p | e:强制摘要区域内存缩放
- -i:指定 top 忽略闲置或僵死进程
- -n number:指定 top 程序重复刷新的次数。
- -o fieldname:任务区域,按照指定字段排序
- -p:只输出指定pid的信息,如:top -pN1 -pN2,或 top -pN1,N2,N3
- -u | -U:仅显示指定用户的相关输出。如:top -u root
3、交互式命令
交互式命令,也就是说在top输入区可以输入的命令:
- 全局命令:
-
h | ? 帮助命令
-
= 退出显示限制
-
A 用于在全屏模式和交替显示模式之间切换。全屏模式下,top 会显示所有可用的窗口和字段。而在交替显示模式下,top 会根据用户的配置显示特定的窗口和字段组(A的执行效果如下:)
扫描二维码关注公众号,回复: 17452843 查看本文章 -
d | s 修改刷新间隔,和 -d 参数类似
-
E 切换摘要区内存数值单位
-
e 切换任务区内存数值单位
-
H 线程模式
-
k 终止线程
-
q 退出
-
W 写入配置文件
-
X 设置输出列宽
-
- 针对摘要区命令:
- m 影响内存和swap
- 按内存类型划分的详细百分比
- 缩略的已使用百分比/总可用量 + 条形图
- 缩略的已使用百分比/总可用量 + 块图
- 关闭内存显示
- m 影响内存和swap
- 针对任务区命令:
- J 数字对齐
- j 列右对齐
- x 突出显示用于排序的列
- y 突出显示正在运行的任务
- c 显示command列的详细命令
- f|F 显示或隐藏某些信息
- u 仅显示特定用户
- V 显示进程树
- M 按%MEM排序
- N 按照PID排序
- P 按照%CPU排序
- T 按照TIME+排序
- R 反转/正常排序字段切换
1.3 案例
1、首次使用top命令
top
###
top - 06:27:35 up 10:37, 4 users, load average: 0.56, 0.49, 0.46
Tasks: 237 total, 2 running, 235 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.7 sy, 0.0 ni, 99.2 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st
MiB Mem : 2933.3 total, 101.6 free, 1934.8 used, 896.9 buff/cache
MiB Swap: 2946.0 total, 2569.4 free, 376.6 used. 821.4 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6154 root 20 0 0 0 0 I 2.0 0.0 0:00.17 kworker+
1480 200 20 0 5622240 1.5g 8392 S 0.7 52.5 11:54.52 java
828 root 20 0 315144 7516 6020 S 0.3 0.3 1:27.55 vmtoolsd
6140 root 20 0 0 0 0 I 0.3 0.0 0:00.79 kworker+
6155 root 20 0 0 0 0 I 0.3 0.0 0:00.52 kworker+
6167 root 20 0 10920 4240 3412 R 0.3 0.1 0:00.03 top
输出内容解释:
- 第一行输出:(与uptime执行结果相同)
- 06:27:35 当前时间
- up 10:37 系统运行时间
- 4 users 当前登录用户数
- load average: 0.56, 0.49, 0.46 系统负载(任务队列的平均长度),分别是1分钟、5分钟、15分钟到现在的平均值(正常情况下,系统负载应该在 0.7*n 以下(n 为 CPU 核心数)
- 第二行输出:进程信息:
- Tasks: 237 total 进程总数
- 2 running 正在运行的进程数
- 235 sleeping 睡眠进行
- 0 stopped 停止的进程
- 0 zombie 僵尸进程
- 第三行输出:CPU信息
- 0.0 us user,非nice(优先级未调整)用户进程运行的时间。这是CPU在用户模式下花费的时间,执行用户空间的代码。
- 0.7 sy system,内核进程运行的时间。这是CPU在内核模式下花费的时间,执行内核空间的代码,如系统调用、设备驱动程序等。
- 0.0 ni nice(优先级调整)用户进程运行的时间。这是那些通过nice命令或setpriority系统调用降低了优先级的用户进程所使用的CPU时间。
- 99.2 id idle,内核空闲处理程序花费的时间。这是CPU没有执行任何任务时的空闲时间
- 0.0 wa IO-wait:等待I/O操作完成的时间。这是CPU等待输入/输出操作(如磁盘读写)完成的时间。如果这个数字很高,通常意味着系统正受到I/O瓶颈的限制。
- 0.0 hi 服务硬件中断的时间。这是CPU处理硬件中断(如定时器中断、设备中断等)所花费的时间。
- 0.2 si 服务软件中断的时间。这是CPU处理软件中断(如内核线程之间的通信)所花费的时间。
- 0.0 st 提供给虚拟化环境执行占CPU时间百分比
- 第四行输出:物理内存MiB Mem
- 2933.3 total 物理内存总量
- 101.6 free 使用的物理内存总量
- 1934.8 used 空闲内存总量
- 896.9 buff/cache 用作内核缓存的内存量
- 第五行输出:虚拟内存 MiB Swap
- 2946.0 total:交换区总容量
- 2569.4 free:使用交换区的总量
- 376.6 used:空闲交换区总量
- 821.4 avail Mem:缓冲交换区总量
- 第六行:空白行,是输入区域
- 第七行之后为任务区,也就是实际运行的服务,第七行是标题行
- PID 进程ID
- PPID 父进程ID
- UID 进程所有者用户ID
- USER 进程所有者用户
- PR 进程任务优先级
- NI nice值,负数表示高优先级,正数表示低优先级
- VIRT 进程使用虚拟内存总量(以KB为单位) VIRT=SWAP+RES
- RES 任务当前正在使用的非交换物理内存
- SHR 共享内存总大小
- S 进程状态
- D 不可中断的睡眠
- I 空闲进程
- R 正在运行
- S 睡眠状态
- T 停止状态
- t 在跟踪过程中被停止
- Z 僵尸进程
- %CPU 上次更新到现在的 CPU占用百分比
- %MEM 进程使用物理内存百分比
- TIME+ 进程使用的CPU时间总计(以1/100秒为单位)
- COMMAND 命令名/命令行
2、其他使用
# 设置刷新间隔(默认单位是s)
top -d 2
# 显示完整命令行
top -c
# 显示特定进程
top -p PID
# 显示特定用户
top -u ubuntu
# 显示刷新几次后退出
top -n 2
# 批处理模式,无交互
top -b
总结
top命令是一个常用命令,尤其是在排查内存等问题时很有用,需要多练习提高熟练度。