上篇:最近火起的 Bean Searcher 与 MyBatis Plus 到底有啥区别?
好久没写文章了,笔记中翻出一篇分享给大家,满满干货哦 ^_^
Top 命令
Top 命令是 Linux 下常用的性能分析工具,类似 Windows 下的 任务管理器,它几乎是 Linux 运维最常用的工具之一,所以对它了解透彻非常必要。
数据界面
执行 top
后,页面展示 统计信息 与 进程信息 两块,如下:
top - 09:48:42 up 35 days, 23:48, 8 users, load average: 0.11, 0.17, 0.18
Tasks: 209 total, 1 running, 208 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.2 us, 3.0 sy, 0.0 ni, 94.0 id, 0.0 wa, 0.3 hi, 0.2 si, 0.3 st
MiB Mem : 7768.0 total, 126.8 free, 6851.6 used, 789.7 buff/cache
MiB Swap: 4060.0 total, 3275.2 free, 784.8 used. 775.4 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2751932 root 20 0 153700 5368 4396 S 0.7 0.1 5:16.61 sshd
3704017 root 20 0 2646340 939340 4408 S 0.7 11.8 4:13.46 java
913193 root 20 0 65536 4824 3888 R 0.3 0.1 0:00.01 top
1721621 root 20 0 628456 6700 1196 S 0.3 0.1 2:55.70 docker-proxy
1 root 20 0 179716 7140 4472 S 0.0 0.1 0:58.45 systemd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
统计信息
-
第一行:时间/用户/负载
09:48:42
- 当前时间up 35 days, 23:48
- 系统运行时间(精确到分)8 users
- 当前登录用户数(查询详细用户,可以再执行who
命令)load average: 0.11, 0.17, 0.18
- 系统负载(即任务队列的平均长度,三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值)
负载是对系统工作量的度量。在Linux上,负载是在任何给定时刻处于
R
和D
状态的进程数。load average 值为提供了必须等待多长时间才能完成任务的相对度量。例如:- 单核心系统上,负载 为 0.4 意味着系统只完成了它能完成的 40% 的工作。负载为 1 意味着系统正好处于满负荷状态——即使添加一点点额外的工作,系统也会过载。负载 为 1.5 的系统意味着它超载了 50% 的工作。
- 在多核系统上,应该首先用
load average
除以 CPU 核数,以得到类似的度量。
-
第二行:进程信息
209 total
- 进程总数1 running
- 正在运行的进程数(对应进程状态R
)208 sleeping
- 睡眠的进程数(对应进程状态S
与D
)0 stopped
- 停止的进程数(对应进程状态T
)0 zombie
- 僵尸进程数(对应进程状态Z
)
-
第三行:CPU 信息(百分比)
2.2 us
- 用户空间占用 CPU 时间(User CPU time)3.0 sy
- 内核空间占用 CPU 时间(System CPU time)0.0 ni
- 用户空间内改变过优先级的进程占用 CPU 时间(Nice CPU time)94.0 id
- CPU 空闲时间(Idle)0.0 wa
- CPU 等待 IO 完成所花时间(IO Wait)0.3 hi
- 硬件中断处理时间(Hardware IRQ)0.2 si
- 软件中断处理时间(Software IRQ)0.3 st
- 窃取(Steal Time: time given to other DomU instances)虚拟化环境中,操作系统会检测虚拟机是否有工作要做,如果检测到它需要执行但是由于 CPU 在其他 VM 上繁忙而无法执行时,以这种方式浪费的时间就是 窃取 时间。
-
第四行:物理内存信息(默认单位:mb)
7768.0 total
- 物理内存总量126.8 free
- 空闲内存总量6851.6 used
- 使用的物理内存总量789.7 buff/cache
- 用作内核缓存的内存量
-
第五行:交换区信息(默认单位:mb)
4060.0 total
- 交换区总量3275.2 free
- 空闲交换区总量784.8 used
- 使用的交换区总量775.4 avail Mem
- 可用内存
第一行同
uptime
命令,后两行同free
命令
进程列表
统计信息下方的表格,便是进程列表了,它的各列含义如下:
PID
- 进程号USER
- 用户PR
- 优先级(越小越早被执行)NI
- 进程 nice 值(-20 到 19,共 40 个值),优先级的调节值,实际优先级PR(new)=PR(old)+nice
VIRT
- 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES
- 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR
- 共享内存大小(与其它进程共享的内存量,单位kb)S
- 进程状态:R
: Runnable(正在 CPU 上执行 或 运行队列中,准备执行)S
: Interruptible sleep(等待事件完成,在统计信息中为 sleeping)D
: Uninterruptible sleep(等待一个 I/O 操作完成,在统计信息中为 sleeping)T
: Stopped(已被作业控制信号停止,或正被跟踪)Z
: Zombie(僵尸进程)
%CPU
- 上次更新到现在的CPU时间占用百分比(单核 cpu 使用率)%MEM
- 物理内存百分比使用率%MEM=RES/总物理内存
TIME+
- 累计占用的 CPU 时间(单位:0.01秒)COMMAND
- 命令名(如果要显示全,可按c
显示)
参数与交互命令
top -help
- 参数帮助(同top -v
)
运行参数
-d
- 刷新间隔(单位:秒,默认 3 秒),例如top -d 1
指定 1 秒刷一次-i
- 不显示任何闲置或者僵死进程-s
- 安全模式中运行-c
- 列COMMAND
显示整个命令行,例如:-Hp pid
查看某个进程内的线程,例如-u xxx
只查看某个用户的进程
进程排序
在 top
命令的界面中,有以下快捷按键对列表进行排序:
P
- 按%CPU
排序M
- 按%MEM
排序T
- 按TIME+
排序N
- 按PID
排序(可查看最新的进程)R
- 切换排序方向(默认为 降序)
列表过滤
在 top
命令的界面中,有以下快捷按键对列表进行过滤:
u
- 输入用户名进行过滤o
- 输入过滤表达式进行过滤,例如:COMMAND=java
- 进程名包含java
!COMMAND=java
- 进程名不包含java
%CPU>0.2
- %CPU 大于 0.2 的
=
- 清除过滤条件
其它命令
↓
- 视角下移(即:列表上移)↑
- 视角上移(即:列表下移)H
- 切换到 线程视图,例如:V
- 父子进程以树形显示,例如:c
- 切换COMMAND
列显示:命令名/命令行e
- 切换 内存统计信息区 与VIRT | RES | SHR
三列的数据单位k
- 杀死指定进程(列表中的第一个进程)s
- 修改刷新间隔q
- 退出(同Ctrl + C
)
交互帮助
当然 top 的交互命令还有很多,进入 top
的界面后,输入 h
或 ?
即可以进如帮助页面,如下: