linux命令__top

top

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。top显示系统当前的进程和其他状况,是一个动态显示过程,可以自动或者通过用户按键来不断刷新当前状态。如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.。比较准确的说,top命令提供了实时的对系统处理器的状态监控,显示系统中CPU最“敏感”的任务列表。top命令可以按CPU使用、内存使用和执行时间对任务进行排序。而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。

需要注意的是:top命令监控的最小单位是进程,如果想监控更小单位时,就需要用到ps或者netstate命令来满足我们的要求。

top输出解释

image-20220604102517886

第一行:任务队列信息

top - |10:26:26   |up 1 day, 22:52,|  2 users,   |load average: 1.43, 1.39, 1.32                     |
------|系统当前时间 |系统运行时间      |当前登录用户两人|负载均衡情况:后面三个数分别是1分钟,5分钟,15分钟的负载情况|

注意:load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了

第二行:Tasks 任务进程

总进程695个,运行进程1个,休眠进程692个,停止进程0个,僵尸进程2个

这里说一下什么是僵尸进程:

我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。

孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵尸进程。

第三行:cpu状态信息

%Cpu(s):|  0.3 us,    |0.2 sy,      |0.0 ni,                |99.3 id, |0.0 wa,       |0.1 hi,   |0.0 si,  |0.0 st
--------|用户空间占用的%|内核空间占用的%|改变过优先级的进程占用CPU的%|空闲CPU的%|IO等待占用CPU的%|硬中断占用%|软中断占用%|当Linux系统是在虚拟机中运行时,等待CPU资源的时间占比

用户空间(User Space)和内核空间(Kernel Space):

简单说,Kernel space 是 Linux 内核的运行空间,User space 是用户程序的运行空间。为了安全,它们是隔离的,即使用户的程序崩溃了,内核也不受影响。

Kernel space 可以执行任意命令,调用系统的一切资源;
User space 只能执行简单的运算,不能直接调用系统资源,必须通过系统接口(又称 system call),才能向内核发出指令。

第四行:内存状态

KiB Mem:Kib表示描述单位,MEM表示内存

  • total:总内存量(4G)
  • free:空闲内存(2G)
  • used:已用内存(1G)
  • buff/cache:缓存内存(307M)

第五行:swap交换分区信息

KiB Swap:Kib表示描述单位,Swap表示交换分区

  • total:总内存量(839M)
  • free:空闲内存(839M)
  • used:已用内存(0)
  • avail Mem:可用内存(2G)

什么是交换分区:

类似于Windows的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况;需要注意的是,存储在交换分区的数据性质,在内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行

free和avail的区别:

free 是真正尚未被使用的物理内存数量。
available 是应用程序认为可用内存数量,available = free + buffer + cache (注:只是大概的计算方法)

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

第六行:各进程状态监控

image-20220604114856816

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时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)

常用命令

常用命令参数为:

  • -c 显示完整的命令路径

    image-20220604115033348

  • -d <时间> 设置间隔时间

    top -d 2 表示每2秒刷新一次
    
  • -u <用户名> 指定用户名

    image-20220604115112984

  • -p <进程号> 指定进程

    image-20220604115301695

  • -n <次数> 循环显示的次数

编辑设置

f

image-20220604115450042

用上下键选择选项,按下空格键可以决定是否在基本视图中显示这个选项,按esc键退出编辑界面。

c

在top基本视图中,敲击c键,可以显示进程的路径:

image-20220604115611798

k

在top基本视图中,敲击k键,可以在不退出top命令的情况下杀死某个正在运行的进程:

image-20220604115655909

b

在top基本视图中,敲击b键,高亮显示当前正在运行的进程:

image-20220604115759519

1

在top基本视图中,敲击数字1键,可监控每个逻辑CPU的状况

image-20220604115843034

posted @ 2022-06-04 12:06  ivanlee717  阅读(135)  评论(0编辑  收藏  举报