1.简介
top命令在Linux系统中用于实时显示系统中各个进程的资源占用情况。它提供了一个动态的、实时的视图,展示了系统中各个进程的CPU、内存占用率,以及运行状态等信息,是系统管理员和系统开发者常用的性能分析工具。
2.常用参数
- -d:number代表秒数,表示页面刷新间隔。默认是5秒。
- -n:与-b配合使用,表示需要进行几次top命令的输出结果。
- -p:指定特定的pid进程号进行观察。
在进入top命令显示的页面还可以输入以下按键执行相应的功能
- 1:监控每个逻辑cpu的状况
- c:切换显示命令名称和完整命令行
- M:可按内存情况进行排序
- P:根据CPU百分比排序
- T:根据时间/累积时间进行排序
- f:选择可显示内容
3.输出详解
命令输出如下
第一行:top 系统概况
top - 21:50:46 当前系统时间
up 1:07 系统本次稳定运行时间,从最近一次开机算起
3 users 当前在线用户数
load average: 0.00, 0.01, 0.05 系统平均负载时间(分别代表每分钟,每五分钟,每十五分钟),服务器性能重要依据,以单颗cpu为例(长期观察每十五分钟这一参数):
- <1:系统资源很充足
- =1:系统在全力处理任务
- >1:CPU已在全力工作,但队队列仍然很长,任务量还很多
第二行:tasks 任务介绍
- total 当前总进程
- runing 个正在运行进程
- sleeping 个睡眠进程
- stopped 个停止进程
- zombie 个僵尸进程
第三行:%cpu CPU信息
- us 表示 CPU 在用户运行的时间百分比,通常用户 CPU 高表示有应用程序比较繁忙。典型的用户程序有:数据库、Web 服务器等
- sy 表示 CPU 在内核态运行的时间百分比(不包括中断),通常内核态 CPU 越低越好,否则表示系统存在某些瓶颈
- ni 表示用 nice 修正进程优先级的用户进程执行的 CPU 时间。nice 是一个进程优先级的修正值,如果进程通过它修改了优先级,则会单独统计 CPU 开销
- id 表示 CPU 处于空闲态的时间占比,此时,CPU 会执行一个特定的虚拟进程,名为 System Idle Process
- wa 表示 CPU 在等待 I/O 操作完成所花费的时间,通常该指标越低越好,否则表示 I/O 存在瓶颈,可以用 iostat 等命令做进一步分析
- hi 表示 CPU 处理硬中断所花费的时间。硬中断是由外设硬件(如键盘控制器、硬件传感器等)发出的,需要有中断控制器参与,特点是快速执行
- si 表示 CPU 处理软中断所花费的时间。软中断是由软件程序(如网络收发、定时调度等)发出的中断信号,特点是延迟执行
- st 表示CPU 被其他虚拟机占用的时间,仅出现在多虚拟机场景。如果该指标过高,可以检查下宿主机或其他虚拟机是否异常
注意:注意:一般我们关注多的是us、sy、id、wa、hi、wi这个6个数值,
- 统计空闲的CPU我们直接统计%id的计数即可,当id持续过低的时候,表示系统迫切需要解决CPU资源问题。
- 统计使用的是CPU需要用1-%id获取。或者us+sy+si.
- wa:使用率过高的时候,我们需要考虑IO的性能是否有瓶颈,可以在使用iostat、sar等命令做进一步分析;
- hi:使用率过高时,表示当前硬件中断占用很大的百分比。一般硬件中断我们可以分析文件/proc/interrupts、/proc/irq/pid/smp_affinity、服务irqbalance是否配置,以及CPU的频率设置,通过这些可以帮系统打散优化系统的硬件中断。
- si:Linux kernel通过用一种软件的方法(可延迟函数)来模拟硬件的中断模式,通常叫做软中断。常见的软件中断一般都是和网络有关。从网卡到IP层的数据报文收发都是si处理的,长时间写日志也可能产生软件中断。
- 当软中断出现瓶颈的时候,系统有个进行叫ksoftirqd,每个CPU都有自己对应的ksoftirqd/n(n为CPU的逻辑ID),每个ksoftirqd的内核线程都会去运行对应的ksoftirqd(函数)来处理自己的中断队列上的软件中断。所以,当网络出现阻塞的时候,软件中断程序ksoftirqd肯定会出现瓶颈。此时我们可以通过ps aux|grep ksoftirqd查看ksoftirqd的瓶颈。
第四行:MiB Mem(内存信息)
- total 物理内存总量
- free 空闲物理内存
- used 已经使用的物理内存
- buff/cache 内核缓存内存量
第五行:MiB Swap(交换分区)
- total 交换区总量
- free 空闲交换区总量
- used 使用的交换区总量
- avail Mem 缓冲的交换区总量。
top进程信息
- PID 进程id
- USER 父进程id
- PR 优先级
- NI 谦让度值 nice值。负值表示高优先级,正值表示低优先级
- VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
- SHR 共享内存大小,单位kb
- S 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
- %CPU 上次更新到现在的CPU时间占用百分比
- %MEM 进程使用的物理内存百分比
- TIME+ 进程使用的CPU时间总计,单位1/100秒
- COMMAND 命令名/命令行