top参数详解

第一行, 任务队列信息, 同 uptime 命令的执行结果

  • 系统时间:15:57:40
  • 运行时间:up 6 days, 4:30
  • 当前登录用户: 3 user
  • 负载均衡(uptime) load average: 0.22, 0.25, 0.23
    load average 后面的三个数分别是1分钟、5分钟、15分钟的负载情况。load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了

第二行, Tasks — 任务(进程)

  • 总进程:234 total, 运行:1 running, 休眠:232 sleeping, 停止: 1 stopped, 僵尸进程: 0 zombie

第三行, cpu状态信息

  • 1.0%us【user space】— 用户空间占用CPU的百分比。
  • 0.6%sy【sysctl】— 内核空间占用CPU的百分比。
  • 0.0%ni【】— 改变过优先级的进程占用CPU的百分比
  • 98.4%id【idolt】— 空闲CPU百分比
  • 0.0%wa【wait】— IO等待占用CPU的百分比
  • 0.0%hi【Hardware IRQ】— 硬中断占用CPU的百分比
  • 0.0%si【Software Interrupts】— 软中断占用CPU的百分比

第四行, 内存状态

32780168 total,  279136 free, 20911624 used, 11589408 buff/cache

第五行, swap交换分区信息

2097148 total, 2097148 free, 0 used. 11307284 avail Mem

可用内存=free + buffer + cached

对于内存监控, 在top里我们要时刻监控第五行swap交换分区的used, 如果这个数值在不断的变化, 说明内核在不断进行内存和swap的数据交换, 这是真正的内存不够用了。

第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,第四行中空闲内存总量(free)是内核还未纳入其管控范围的数量。

纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。

第六行, 空行

第七行以下:各进程(任务)的状态监控

PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S            进程状态,D:不可中断的睡眠状态,R:运行,S:睡眠,T:跟踪/停止,Z:僵尸进程
%CPU    进程使用的CPU占用百分比
%MEM   进程使用的物理内存百分比
TIME+    进程使用的CPU时间总计
COMMAND — 进程名称(命令名/命令行)

常用快捷键

h    显示快捷键帮助
k    终止一个进程
i     开/关忽略闲置和僵死进程
q    退出程序
r     重新安排一个进程的优先级别
S      切换到累计模式
s    更改刷新间隔时间,单位秒
f,F      从当前显示中添加或者删除项目
o,O     改变显示项目的顺序
l     切换显示平均负载和启动时间信息
m     切换显示内存信息
M     根据内存使用大小排序
t     切换显示进程和CPU状态信息
c    切换显示命令名称和完整命令行
P      根据CPU使用率进行排序 (默认排序)
T    根据时间/累计时间进行排序
w    将当前设置写入~/.toprc文件中
1    展开多核cpu显示

top使用方法

使用格式:

top [-] [d] [p] [q] [c] [C] [S] [s] [n]

参数说明:

d:指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。

p:通过指定监控进程ID来仅仅监控某个进程的状态。

q:该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。

S:指定累计模式。

s:使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。

i:使top不显示任何闲置或者僵死进程。

c:显示整个命令行而不只是显示命令名。

生产 CPU 高负载问题排查

1.top -c 将系统资源使用情况实时显示出来(-c 参数可以完整显示命令)

2. 输入大写 P 将应用按照 CPU 使用率排序

3. top -Hp pid 然后输入 P 可以按照 CPU 使用率将线程排序

4. 将线程的 ID 转换为 16 进制(printf "%x " PID), 通过 jstack pid >pid.log 生成日志文件,利用刚才的 16 进制进程 ID 去这个线程快照中搜索即可知道消耗 CPU 的线程在干啥了.

原文地址:https://www.cnblogs.com/xxoome/p/15425338.html