top 命令详解

top 命令详解

top

作用:动态查看系统进程信息

路径:/usr/bin/top

top - 17:33:20 up 6 min, 1 user, load average: 0.79, 1.28, 0.71
Tasks: 237 total, 3 running, 234 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.3 hi, 0.0 si, 0.0 st
MiB Mem : 1826.8 total, 104.9 free, 1067.5 used, 654.5 buff/cache
MiB Swap: 2116.0 total, 2112.5 free, 3.5 used. 586.3 avail Mem

PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND   

指标解释:

up 系统运行时间

user 系统登录用户数

load average:过去某段时间内CPU平均的负载情况,(排队要执行的的进程数,排队的数量最好不要超过cpu的核数,比如4核,但是数字大于

4则代表有进程在排队,等待执行)

第一个值所在的位置:过去一分钟的

第二个值所在的位置:过去五分钟的

第三个值所在的位置:过去十五分钟的

Task:当前有多少个任务,几种状态:正在运行、休眠、停止、僵死

Cpu(s):反映cpu的一些数据(默认显示的是平均值):

  • us:用户使用(用户进程,如myslq、tomcat、qq)的cpu的百分比

  • sy:系统使用(内核空间)的cpu的百分比

  • ni:用户进程空间改变过优先级的进程占用 CPU 的百分比。通过 nice 命令可以更改优先命令来执行程序。优先级 -20 最高,19最低

  • id:idle,空闲的 CPU 百分比:=1-us-sy;统计使用的 CPU 利用利用率,通过 1-%id 获取。id持续过低,则CPU资源有问题

  • wa:wait,因为有些任务是需要磁盘的读写(如tomcat需要写日志),而CPU的速度比磁盘写入的速度更快,所以有了这个等待写入数据的状态,如果这个值比较大的话,说明磁盘写入速度比较慢,压力比较大,磁盘那块很可能就有问题,则考虑 IO的性能是否有瓶颈,再用 iostat,sar等命令辅助分析

  • hi:硬中断占用 CPU 的百分比,使用率过高时,表示当前硬件中断占比高。一般硬件中断可以分析文件 /proc/interrupts、/proc/irq/pid/smp_affinity、服务 irqbalance 是否配置、以及CPU的频率设置,通过这些打散优化系统的硬件中断。

  • si:软中断占用 CPU 的百分比。软中断:Linux 内核通过一种软件的方法(可延迟函数)来模拟硬件的中断,通常叫软中断。软中断一般和网络有关,如网卡到IP层的数据包收发,系统长时间写日志等都会产生软中断。 当网络出现拥塞,软件中断程序 ksoftirqd 肯定会出现瓶颈,可使用 ps aux | grep ksoftirqd 命令查看相关信息。

  • st:跟中断相关的,不用关注

  • Mem:memory,内存,一般如果是要看内存不使用top命令;几种状态如下

    • total 物理内存总量
    • used 使用的物理内存总量
    • free 空闲内存总量
    • buffers 用作内核缓存的内存量
    • cached 缓冲的交换区总量
      buffers 和 cached 的作用是缩短I/O 系统调用的时间,比如读写。cache 的值大,说明 cache 住的文件数多,若频繁的访问文件能被命中,则明显会比读取磁盘调用快,磁盘的IO必定会减少。若命中率低,要考虑 drop cache 并提升命中率。
  • Swap:交换分区,磁盘上的一块区域,当内存满时,可以充当临时内存,但是速度还是比真实的内存慢很多。这个指标反映出内存是否足够的情况,若used数据一直在涨,则说明内存不足

下方显示了各个进程的详细信息:

  • 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的百分比,得出进程的CPU利用率
  • %MEM 当前进程占用的物理内存的百分比
  • TIME+ 进程使用的CPU时间总计,单位1/100秒
  • COMMAND 命令名/命令行

释放内存操作:当系统急需要内存的时候,通过以下操作释放 buffer/cache,这个可以看成可用内容,drop cache 操作如下

# sync
# sync
# echo 3 > /proc/sys/vm/drop_caches
# echo 3 > /proc/sys/vm/drop_caches

原理,sync 操作是把物理内存数据同步到磁盘的过程,保证drop cache 过程数据不丢失,执行同步命令。

前后内存差异 可以用 free -m 命令查看变化

一些内存关系:
物理内存总数
Mem_total = Mem_used + Mem_free
实际使用的物理内存数
-buffers/cache = used - buffers - cache
实际可用的物理内存数
+buffers/cache = free + buffers + cache
交换分区对应的内存总数
Swap_total = swap_used + swap_free