top命令输出详解

top命令输出详解

top命令是linux下常用的性能分析工具,能够实时(默认3s刷新一次)的显示系统的资源使用情况,以及各种进程的资源使用情况,类似于windows的任务管理器。

top - 10:21:18 up 23:47,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 109 total,   1 running, 108 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.0 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1862636 total,  1485444 free,   146488 used,   230704 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  1521256 avail Mem 
top - 10:21:18 up 23:47,  1 user,  load average: 0.00, 0.01, 0.05

# 第一行数据相当于uptime命令输出。
# 10:21:18是显示的当前时间
# up 23:47 是系统运行的时间。 
# 1user 表示当前有1一个用户在登录   
# load average: 0.00, 0.01, 0.05   分别表示系统1分钟、5分钟、15分钟的平均负载
平均负载

平均负载是表示平均活跃进程数,包括正在running的进程数,准备running(就绪态)的进程数,和处于不可终端睡眠状态的进程数。如果平均负载数刚好等于cpu核数,那证明每个核都能得到很好的利用,如果平均负载数大于核数证明系统处于过载的状态,通常认为是超过核数的70% 认为是严重过载,需要关注。还需要结合1分钟、5分钟、15分钟平均负载看负载的趋势的趋势,如果1分钟负载较高,5分钟和 15分钟的平均负载都比较低,说明是瞬间升高,需要观察。如果三个值都很高,则需要关注是否某个进程在疯狂消耗cpu或者有频繁的IO操作,也有可能是系统运行的进程太多,频繁的进程切换。

## 第二行
Tasks: 109 total,   1 running, 108 sleeping,   0 stopped,   0 zombie
# 第二行的task信息展示的系统运行的整体进程数量和状态信息。
# 109 total 表示系统现在一共有109个用户进程
# 1 running 表示1个进程正在处于running状态
# 108 sleeping表示108个进程处于sleeping状态
# 0 stopped 表示0个进程处于stopped状态 
# 1 zombie 表示有一个僵尸进程。
出现僵尸进程如何解决
僵尸进程

子进程结束是父进程没有调用wait()/waitpid()等待子进程结束,那么就会产生僵尸进程。原因是子进程结束时并没有真正退出,而是留下一个僵尸进程的数据结构在系统进程表中,等待父进程清理,如果父进程已经退出则会由init进程接替父进程进行处理(收尸)。由此可见,如果父进程不作为并且又不退出,就会有大量的僵尸进程。每个僵尸进程会占用进程表中的一个位置(slot),如果僵尸进程太多会导致系统无法创建新的进程,因为进程表的容量是有限的。所以当zombie这个指标太大时需要引起我们的注意。

如何解决
  1. 找到僵尸进程的父进程pid(pstress可以显示进程父子关系),kill -9 pid,父进程退出后init自动回清理僵尸进程。(需要注意的是kill -9 并不能杀死僵尸进程)
  2. 重启系统
## 第三行
%Cpu(s):  0.2 us,  0.0 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
# 这一行%Cpu(s)表示的是总体cpu使用情况
# us:user 表示用户态的cpu时间比例
# sy:system 表示内核态的cpu时间比例
# ni:nice 表示运行低优先级进程的CPU时间比例
# id idle 表示空闲CPU时间比例
# wa:iowait 表示处于IO等待的cpu时间比例
# hi:hard interrupt 表示处理硬中断的cpu时间比例
# si:soft interrupt 表示处理软中断的cpu时间比例
# st:steal 表示当前系统运行在虚拟机中的时候,被其他虚拟机占用的cpu时间比例

所以真题的Cpu使用率 =1-id。当us很高时,证明cpu时间主要消耗在用户代码,西药优化用户代码。sy很高时,说明cpu时间都消耗在内核,要么是频繁的系统调用,要么是频繁的cpu切换(进程切换、线程切换)。wa很高时,说明有进程在进程频繁的IO操作,有可能是磁盘的IO,也有可能是网络IO。si很高时,说明cpu时间消耗在处理软中断,网络收发包会触发系统软中断,所以大量的网络小包会导致软中断的频繁触发,典型的SYN Floor会导致si很高

# 第四、五行 显示的是系统内存使用情况。
KiB Mem :  1862636 total,  1485444 free,   146488 used,   230704 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  1521256 avail Mem 
# total 表示总内存
# free 表示没有使用过的内存
# used 是已经使用的内存
# buff 表示用于读写磁盘缓存的内存
# cache表示用于读写文件缓存的内存
# avail 表示可用的应用内存

Swap 原理是吧一块磁盘空间或者一个本地文件当成内存来使用。Swap total 表示能用swap总量,swap free表示剩余,used表示已经使用的。这三个值都为0 的时候表示系统关闭了swap功能,如果环境是虚拟机,虚拟机一般都是关闭swap功能的

## 第六行表示具体的每个状态的进程
   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND 
# PID 进程ID
# USER 进程所有者的用户名,例如root
# PR 进程调度优先级
# NI 进程nice值(优先级),越小的值代表越高的优先级
# VIRT 进程使用的虚拟内存
# RES 进程使用的物理内存(不包括共享内存)
# SHR 进程使用的共享内存
# CPU 进程使用的CPU占比
# MEM 进程使用的内存占比
# TIME 进程启动后到现在所用的全部CPU时间
# COMMAND 进程的启动命令(默认只显示二进制,top -c能够显示命令行和启动参数)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值