Linux 命令 —— top命令(查看进程资源占用)

文章目录

  • [top 命令显示信息介绍](#top 命令显示信息介绍)
  • [top 命令使用](#top 命令使用)

top 命令显示信息介绍

top 命令是 Linux/Unix 系统中常用的进程监控工具,可以实时动态显示系统中各个进程的资源占用情况,包括CPU、内存等。

进入 linux 系统,直接输入 top,回车,就会显示如下所示的信息。下面详细介绍显示内容:

1、第一行:时间上的统计

复制代码
top - 15:10:50 up 10 min,1 user,load average: 3.58,3.28,3.01
  1. top - 15:10:50:表示当前系统的时间是15:10:50;

  2. up 10 min:表示系统当前已经运行了10分钟。

  3. user:表示当前登录系统的用户数为1。

  4. load average: 3.58, 3.28, 3.01:系统负载信息,分别表示1分钟、5分钟和15分钟内的平均负载。负载值越高,表示系统资源被占用得越多。

    一般来说,如果1分钟平均负载超过了系统逻辑 CPU 核心数,就说明系统存在性能瓶颈。

什么是平均负载:

  • 平均负载就是单位时间内平均活跃的进程数,包括了正在使用 CPU 的进程、等待 CPU 和 等待 I/O 的进程。和 CPU 使用率并没有直接关系,如 I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定高;CPU 密集型进程,使用大量 CPU 会导致平均负载升高;大量等待 CPU 的进程调度也会导致平均负载升高。

活跃进程:处于可运行状态和不可中断状态的进程:

  • 可运行状态的进程是指正在使用 CPU 资源执行计算任务或者处于就绪队列中等待 CPU 调度器分配 CPU 时间片的进程,也就是 ps 命令看到的处于 R 状态(Running)的进程。
  • 不可中断状态的进程是指正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如正在等待 I/O 操作完成(磁盘读写、网络收发等)。在 ps 命令中看到的D状态(Uninterruptible Sleep,也称为 Disk Sleep)的进程。这些进程虽然不会占用 CPU 时间,但也会被算入平均负载计算中。

关注平均负载与 CPU 内核数来分析系统可以存在性能问题,假如平均负载为 2:

  • 在单核 CPU 的系统上,意味着有一半的进程竞争不到 CPU;
  • 在双核 CPU 的系统上,意味着所有的 CPU 都刚好被完全占用;
  • 在多核 CPU(如 4 核)的系统上,意味着 CPU 有 50% 的空闲。

观察 1分钟、5分钟和15分钟内的平均负载。通过分析这三个时间内平均负载,可以得出系统平均负载的趋势信息;

  • 如果 3 个时间段的负载值差异不大,说明系统负载平稳;且负载值都很高,说明系统负载一直很重。
  • 如果 1 分钟负载很高,但 15 分钟负载相对较低,说明系统可能在最近 1 分钟存在短暂的负载高峰,可能负载还会持续增加;如果 1 分钟负载很低,但 15 分钟负载相对较高,说明之前有很大的负载,最近 1 分钟负载在减少。

2、第二行:任务统计

复制代码
Tasks: 11 total, 1 running,10 sleeping,0 stopped, 0 zombie
  1. 11 total:表示系统中总共有 11 个进程或任务;
  2. 1 running:表示有1个进程正在运行,占用 CPU 资源执行计算任务;(可运行状态)
  3. 10 sleeping:表示有 10 个任务处于"不可中断睡眠"状态。(不可中断状态)
  4. 0 stopped:表示当前系统中有0个进程处于"已停止"状态;
  5. 0 zombie:表示僵尸进程数。僵尸进程是已经终止但父进程未对其进行资源回收的进程,这种进程不会占用系统资源,但会在进程表中保留相关信息。

3、第三行:CPU 统计

复制代码
%Cpu(s): 3.4 us, 0.0 sy,0.0 ni, 96.6 id, 0.0 wa, 0.0 hi,0.0 si, 0.0 st
  1. 3.4 us:"us" 代表用户模式 (user mode),用户空间占用CPU的百分比。表示有 3.4% 的 CPU 时间被用户进程所占用。
  2. 0.0 sy:"sy" 代表系统模式 (system mode),内核空间占用CPU的百分比。表示没有 CPU 时间被内核进程所占用。
  3. 0.0 ni:"ni" 代表 nice 值被改变的进程占用的 CPU 时间百分比,也就是改变过优先级的进程占用 CPU 的百分比。
  4. 96.6 id:"id" 代表空闲 (idle),空闲 CPU 百分比。表示有 96.6% 的 CPU 时间处于空闲状态。
  5. 0.0 wa:"wa" 代表等待输入/输出的 CPU 时间百分比,IO 等待占用 CPU 的百分比。
  6. 0.0 hi:"hi" 代表硬中断 (hardware interrupt) 占用的 CPU 时间百分比。
  7. 0.0 si:"si" 代表软中断 (software interrupt) 占用的 CPU 时间百分比。
  8. 0.0 st:"st" 代表被虚拟机偷取的 CPU 时间百分比,这个指标主要针对运行在虚拟机上的系统而言。在虚拟化环境中,物理机的 CPU 资源是被分配给多个虚拟机使用的。当一个虚拟机暂时没有使用 CPU 时,可能会将这部分空闲的 CPU 时间分配给其他虚拟机使用,这个时间即为 "st" 部分;对于物理机或者没有运行在虚拟化环境中的系统来说,这个 "st" 指标通常都是 0.0,因为没有发生 CPU 时间被其他虚拟机偷走的情况。

4、第四行:内存统计

复制代码
KiB Mem : 2097152 total, 757808 free,1191452 used, 147892 buff/cache
  1. 2097152 total:总物理内存。表示系统总共有 2097152 KiB(约2GB)的物理内存。
  2. 757808 free:空闲内存。表示当前系统中还有 757808 KiB 的可用内存,即空闲内存。
  3. 1191452 used:已用内存。表示当前系统中已经有 1191452 KiB 的内存被使用了。
  4. 147892 buff/cache:可用于缓存的内存。表示有 147892 KiB 的内存被用作页缓存和缓冲区。
    页缓存用于缓存文件系统数据,缓冲区用于存储块设备的I/O数据。这部分内存在需要的时候可以很快地被释放回给应用程序使用。

5、第五行:swap交换分区信息统计

交换分区 (Swap) 是操作系统用来扩展内存容量的一种机制。当物理内存不足时,操作系统会将一些不常用的内存页面交换到 Swap 分区,即把一部分硬盘空间虚拟成内存使用。在内存不够的情况下,操作系统先把内存中暂时不用的数据存到硬盘的交换空间,从而解决内存容量不足的情况,为更重要的进程和数据腾出物理内存空间。

复制代码
KiB Swap: 0 total, 0 free, 0 used, 905700 avail Mem
  1. 0 total:用于交换的总内存。表示系统中没有配置任何交换分区 (Swap) 空间;
  2. 0 free:空闲交换内存;
  3. 0 used:已用交换内存;
  4. 905700 avail Mem:可用物理内存。表示系统中还有 905700 KiB (约885MB) 的可用物理内存。

6、第六行:各进程状态监控

复制代码
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+  COMMAND
  1. PID (Process ID):进程的唯一标识符;------ 可用于定位和管理特定的进程。

  2. USER:运行该进程的用户(进程所有者);------ 可用于审查用户行为和进程权限。

  3. PR (Priority):表示进程的调度优先级。数值越小,优先级越高;------ 可用于调整进程的重要性和CPU使用情况。

  4. NI (Nice value):nice 值用于调整进程的调度优先级。一般情况下,nice 值越小,优先级越高;------ 可用于调整进程的优先级和资源共享。

  5. VIRT (Virtual Memory Size):表示进程使用的虚拟内存大小;------ 可用于评估进程的内存需求。

  6. RES (Resident Size):表示进程使用的物理内存大小;------ 可用于识别内存密集型进程。

    (对于 Java 进程,包括 Java 堆、方法区、线程栈等 JVM 各个内存区域的总和。JVM 堆内存参数设置只是定义了 Java 堆的最小和最大值,并不等同于 RES 值。RES 值会随着 Java 应用程序的实际内存使用情况而动态变化。)

  7. SHR (Shared Mem):表示进程使用的共享内存大小;------ 可用于优化内存使用。

  8. S (Status):显示进程的状态,常见的状态有:R (Running) - 正在运行、S (Sleep) - 睡眠状态、D (Uninterruptible Sleep) - 不可中断的睡眠状态、Z (Zombie) - 僵尸进程、T=跟踪/停止;------ 可用于识别异常或未响应的进程。

  9. %CPU:表示上次更新到现在进程使用的 CPU 时间占用百分比;------ 可用于识别CPU密集型进程。

  10. %MEM:表示进程使用物理内存的占用百分比;------ 可用于识别内存密集型进程。

  11. TIME+:表示进程运行使用的 CPU 时间累计,精确到百分之一秒(单位1/100秒);------ 可用于监控进程的执行时间和效率。

  12. COMMAND:进程的命令名称。------ 可用于识别进程的功能和用途。

top 命令使用

1、查看所有进程

复制代码
top

示例:top。显示了所有进程的情况。

2、查看指定进程的所有线程

复制代码
top -H -p <pid>
  • -H 选项可以切换 top 命令进入线程模式,这样它就会显示进程内的所有线程,而不是仅显示进程本身。
  • 通过 -p <pid> 选项,可以指定要监控的进程 ID (PID)。

示例:top -H -p 587。显示进程 587 下的所有的线程情况。

3、排序显示

  • M: 按内存使用排序
  • P: 按 CPU 使用排序
  • T: 按运行时间排序
  • N: 按 PID 排序

示例:按 M 进行内存使用排序。

4、显示设置

  • E:切换 KiB Mem、KiB Swap 统计数据的内存单位 (KiB/MiB/GiB 等)
  • e:切换 VIRT、RES、SHR 内存单位 (m/g/t 等)
  • x: 高亮正在排序的列
  • y: 高亮运行中的进程

示例:按 E 和 e 切换内存单位。

相关推荐
程序员游老板8 小时前
基于SpringBoot3+vue3的爱心陪诊平台
java·spring boot·毕业设计·软件工程·课程设计·信息与通信
期待のcode8 小时前
Springboot核心构建插件
java·spring boot·后端
遥不可及~~斌8 小时前
Java 面试题集 -- 001
java·开发语言
hkhkhkhkh1238 小时前
Linux设备节点基础知识
linux·服务器·驱动开发
C182981825758 小时前
HttpURLConnection 与其他客户端关系
java
通往曙光的路上8 小时前
发邮件1、创建邮箱
java
HZero.chen9 小时前
Linux字符串处理
linux·string
张童瑶9 小时前
Linux SSH隧道代理转发及多层转发
linux·运维·ssh
汪汪队立大功1239 小时前
什么是SELinux
linux
麦麦鸡腿堡9 小时前
Java_类的加载
java·开发语言