Linux性能监控命令-top

news2024/9/27 7:18:21

简介

top 命令用于实时监视系统的性能和进程信息。它提供了一个动态的、交互式的界面,列出了当前运行的进程,并显示了它们的 CPU
和内存使用情况。通过该命令可以对硬件性能瓶颈做出基本判断。
1. 语法

top
top [参数]
top 有 2 种指定参数方式:

直接指定参数 top -[参数]
交互界面指定参数 top,交互按 [参数]

1.1. 常用参数

-c:显示程序完整命令路径
-p:指定查看某个PID状态(最多指定20个PID,以逗号分割)
-u:指定查看某个用户下的进程
 
-b:批处理模式操作(默认3s显示一次指定信息)
-d:延迟时间间隔(秒)
-n:迭代次数限制

1.2. 交互命令

h:帮助文档
f:视图设置
q:退出
1:显示各个 CPU 使用情况
P:按 CPU 使用率排序
c:显示 COMMAND 完整命令
i:忽略闲置进程和僵尸进程
T:按使用时间排序
M:按内存使用率排序
e:切换进程使用内存单位(K/M/G/T/P/E/)
E:切换第 4 行总内存单位(K/M/G/T/P/E/)
s:指定刷新时间(单位:s)
U:指定用户
k:kill 某个进程(输入PID)

2. 关键字解释

在学习使用之前,需要先理解各个关键字的意思
在这里插入图片描述

2.1. 头部解释

【第 1 行】查看系统负载信息
在这里插入图片描述

top - 18:28:46:当前时间
up  9:34      :系统运行时间
4 users       :当前用户连接数
load average  :平均负载。分别显示1/5/15分钟的负载情况

【第 2 行】查看进程状态
在这里插入图片描述

184 total   :当前进程总数为 184
1 running   :正在运行的进程数为 1
182 sleeping:睡眠的进程数为 182
1 stopped   :停止的进程数为 1
0 zombie    :僵尸进程数为 0

【第 3 行】查看 CPU 占用情况
在这里插入图片描述

0.0 us :用户空间占用的 cpu%
0.3 sy :内核空间占用的 cpu%
0.0 ni :用户进程空间内改变过优先级的进程,占用的 cpu%
99.7 id:空闲的 cpu%
0.0 wa :正在等待中的 cpu%
0.0 hi :硬中断占用的 cpu%
0.0 si :软中断占用的 cpu%
0.0 st :管理程序(hypervisor)为另一个虚拟进程提供服务而等待的虚拟CPU占比

【第 4 行】查看物理内存使用情况(默认单位 KB)
在这里插入图片描述

995676 total     :物理内存总量
96392 free       :剩余的物理内存
527376 used      :使用的物理内存
371908 buff/cache:缓冲区正在使用的内存
# 剩余内存(free)公式
total - used - buff/cache = free
# 实际可用内存公式
total - used

【第 5 行】查看交换分区使用情况(默认单位 KB)
在这里插入图片描述2097148 total :交换区总内存 2097148 free :交换区剩余的内存 0 used :交换区使用的内存 297912 avail Mem:交换区可用的内存

这里的交换分区内存和第4行的物理内存是有明显区别的。物理内存是系统中真正的内存,速度非常快;而交换分区的内存只是在硬盘上创建的一个特殊的区域,相当于物理内存的延伸,它的速度是远低于物理内存的。所以,只有当物理内存使用完了才会用到交换分区的内存,换句话说,当使用交换分区就说明物理内存用完了,要及时检查进程,避免系统卡死。

2.2. 内容解释

在这里插入图片描述

PID    :进程的PID
USER   :进程的用户
PR     :优先级(rt 表示实时调度优先级)
NI     :进程的静态优先级调整值(负数表示优先级高,正数表示优先级低)
VIRT   :进程的虚拟内存大小
RES    :进程使用的物理内存大小
SHR    :进程共享的内存大小
S      :进程状态(D:不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
%CPU   :进程的 cpu 占用情况
%MEM   :进程的物理内存占总内存百分比
TIME+  :进程累计的CPU使用时间(单位1/100秒)
COMMAND:进程名

3. top 交互方法

3.1. 查看cpu信息

查看 cpu 信息直接使用 top 即可,默认是以 cpu 占用率排序。如果切换到其他选项,也可以使用大写 P 切换到以 cpu 排序。

top -c  # 交互按 P
    # -c 是为了显示进程的详细信息,协助分析问题

在这里插入图片描述

通过 cpu 排序可以清晰得知当前正在运行的进程。比如占用最高的是 test.sh 程序

除了查看使用 cpu 最高的进程,还能查看各个 cpu 的详细使用情况

top 交互按 1

在这里插入图片描述

cpu 的编号从 0 开始,4个核就是 cpu0~3,这里可以清晰的了解各个 cpu 的详细使用情况。正常情况下,us 值会比 sy 值高得多。如果 sy 比较高,那么程序的调用可能不合理;如果 us 和 sy 都不高,但是 wa 很高,那么可能是磁盘出现了瓶颈,cpu 在等待 IO。

除了观察各个进程的 cpu 使用情况外,还应该观察整体的负载信息

lscpu    # 查看cpu信息

在这里插入图片描述

top    # 第1行查看负载

在这里插入图片描述

可以看到本机 cpu 有 4 核,系统负载的 1/5/15 分钟监控分别是 19/11/5 。

cpu 为 4 核可以理解为高速公路上有 4 条道路,使用 cpu 的程序可以理解为高速上的车。按正常情况下,一次性可以通过 4 辆车,如果超过 4 辆则会阻塞,而这些阻塞的车就是系统负载。

从结果来看,1分钟监控有19个负载,也就是说前面的车辆后面排了19辆,4条道路 19 / 4 = 4.75,也就是每个 cpu 后面还有 5 个程序在等待着,所以造成了负载。

正常来讲,负载小于 cpu数 * 2 可以接受,如果大于这个数则需要关注程序的执行情况了,这可能会使上下文切换严重,导致性能下降。

3.2. 查询内存信息

top 可以查看整体的内存使用情况和各个进程使用的内存情况,并分析是否存在内存泄漏。

top -c  # 交互按 M
    # -c 是为了显示进程的详细信息,协助分析问题

在这里插入图片描述

从头部信息第 4、5 行可以看到整体的内存使用情况。如果 free 剩余内存越多,说明可用的内存越多;如果 used 使用内存越多,说明真正还能用的内存越少;buff/cache 是缓存的大小,是将一部分空闲的物理内存用于存放最近使用过的文件数据和文件系统元数据放在这里,用来提高系统性能和响应速度,当 free 不足时,系统会自动清理 buff/cache 的缓存,所以缓存的数据+剩余内存才是系统实际可用的大小。
第5行的交换分区在头部解释中已说明,使用当物理内存不够才会使用交换分区。

交互按下 M 键后,所有的进程都是以内存使用占比来排序,体现在 %MEM 列。举个例子:当发现机器很卡怎么处理?
使用 top 查看整体内存,查看 free 是否已经很小。
当可用内存很小时,按 M 键查看占用内存最多的进程,如果该进程可有可无,kill 即可
判断某个进程是否发生内存泄漏我们通过 VIRT、RES、SHR 来判断。一般来说一个程序在启动的时候就已经规划好了使用大小,启动程序后可以在 VIRT 中查看大小。正常情况下该程序的所有进程 RES 不会超过 VIRT 起始分配的大小,并且存在多个进程时,它们的内存都是共享的,可以通过 SHR 来判断。所以,判断的方法如下:
记录起始的 VIRT 大小
查看进程的 RES 是否持续增长,如果超过了起始 VIRT 还在增长,那么需要关注
程序的多个进程的内存是共享的,如果其中某个进程 RES 远大于 SHR,也需要关注

需要注意的是 %MEM 占比是当前进程使用的内存除以总内存,由于很多进程的内存都是共享的,所以全部百分比加起来可能超过了 100%,这是正常的。

3.3. 查看某个用户信息

查看某个用户信息可以通过参数或交互参数实现

# 方法一
top -U [用户名]
# 方法二
top  交互下按U键,输入用户名

在这里插入图片描述
直接指定某个用户后,显示的进程不会包含其他用户,当然,按 cpu 或内存排序依然不受影响。

4. 批处理模式

这是一种非交互方式运行的 top 命令,一般自动化脚本或需要记录某个进程信息时使用,下面介绍几个常用案例。参数如下

-b:指定批处理模式
-d:指定间隔时间(s)
-n:指定监控次数(不指定则一直监控)

4.1. 按cpu排序的进程

top -b -d 2 -o %CPU
-b:指定批处理模式
-d:每2s输出一次
-o:指定以cpu排序(实际上不指定也行,默认是cpu排序)

在这里插入图片描述
可以看到 top 会将全部进程显示,所以显得非常繁琐。我们可以让其只显示一次,只查看前10的进程

top -b -n 1 | head -17 | tail -11

在这里插入图片描述
还可以指定某个用户

top -b -d 2 -U yt

在这里插入图片描述

4.2. 按内存排序的进程

按内存排序的方法与cpu方法一样,只是换成 -o %MEM

top -b -d 2 -U yt -o %MEM

在这里插入图片描述

4.3. 按PID查看进程

批处理模式按 PID 查看是最实用的方法,但 PID 最多支持20个,以逗号分割。

【案例一】指定PID按cpu排序

top -b -c -d 2 -n 5 -o %CPU -p 2093,2092,2022
-b:指定批处理模式
-c:显示进程详细信息
-d:间隔2s输出一次
-n:总共输出5-o:指定cpu排序
-p:指定PID,以逗号分割

在这里插入图片描述
【案例二】指定PID按内存排序

top -b -c -d 2 -n 5 -o %MEM -p 2093,2092,2022

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1403369.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python 生成 图片网页列表 显示路径和建立时间 笔记

Python 一键 生成 图片网页列表 显示路径和建立时间 (方便查看复制路径、重复一键生成) 支持格式:jpg \png\ svg\ webp 图片网页列表 图示: 参考代码: # -*- coding: utf-8 -*- import os import datetime# 指定图片…

自己构建webpack+vue3+ts

先看看我的目录结构(我全局使用TS): 一、安装配置webpack打包 安装esno npm install esnoesno 是基于 esbuild 的 TS/ESNext node 运行时,有了它,就可以直接通过esno *.ts的方式启动脚本,package.json中添加 type:…

【动态规划】【C++算法】801. 使序列递增的最小交换次数

作者推荐 【动态规划】【广度优先搜索】【状态压缩】847 访问所有节点的最短路径 本文涉及知识点 动态规划汇总 数组 LeetCode801使序列递增的最小交换次数 我们有两个长度相等且不为空的整型数组 nums1 和 nums2 。在一次操作中,我们可以交换 nums1[i] 和 num…

【Java程序员面试专栏 专业技能篇】MySQL核心面试指引(二):核心机制策略

关于MySQL部分的核心知识进行一网打尽,包括三部分:基础知识考察、核心机制策略、性能优化策略,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 本篇Blog为第二部分:核心机制策略,子节点表示追问或同级提问 日志机制 关于MySQL的几…

【Web前端开发基础】CSS的结构伪类选择器、伪元素、浮动

CSS的浮动 目录 CSS的浮动一、学习目标二、文章内容2.1 结构伪类选择器2.2 伪元素2.3 标准流2.4 浮动2.5 清除浮动2.6 拓展(BFC) 三、综合案例3.1 小米模块案例3.2 网页导航案例 一、学习目标 能够使用结构伪类选择器在HTML中选元素能够说出标准流元素的…

Kafka 问题排查

订单宽表数据不同步 事情的起因是专员在 ze app 上查不到订单了,而订单数据是从 mysql 的 order_search_info 查询的,order_search_info 表的数据是从 oracel 的 BZ_ORDER_INFO 表同步过来的,查不到说明同步有问题 首先重启,同步…

《WebKit 技术内幕》学习之五(2): HTML解释器和DOM 模型

2.HTML 解释器 2.1 解释过程 HTML 解释器的工作就是将网络或者本地磁盘获取的 HTML 网页和资源从字节流解释成 DOM 树结构。 这一过程中,WebKit 内部对网页内容在各个阶段的结构表示。 WebKit 中这一过程如下:首先是字节流,经过解码之…

终端(命令提示符或Windows PowerShell或Azure Cloud Shell)概述

终端(命令提示符或Windows PowerShell或Azure Cloud Shell)是一种很 不 好用的东西 就是要背,很 不 爽 介绍 Windows 终端是一个新式主机应用程序,它面向你喜爱的命令行 shell,如命令提示符、PowerShell 和 bash&…

力扣刷MySQL-第五弹(详细讲解)

🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:力扣刷题讲解-MySQL 🍹文章作者技术和水平很有限,如果文中出…

Python 算法交易实验67 第一次迭代总结

说明 在这里对第一次迭代(2023.7~ 2024.1)进行一些回顾和总结: 回顾: 1 实现了0~1的变化2 在信息隔绝的条件下,无控制的操作,导致被套 总结: 思路可行,在春暖花开的时候&#x…

设备对象(DEVICE_OBJECT)

设备对象(DEVICE_OBJECT) 每个驱动程序会创建一个或多个设备对象,用DEVICE_OBJECT数据结构表示。每个设备对象都会有一个指针指向下一个设备对象,因此就形成一个设备链。设备对象链的第一个设备是由DRIVER_OBJECT结构体中指明的。设备对象保存设…

C++ 之LeetCode刷题记录(十五)

😄😊😆😃😄😊😆😃 开始cpp刷题之旅。 依旧是追求耗时0s的一天。 94. 二叉树的中序遍历 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: …

C#,入门教程(28)——文件夹(目录)、文件读(Read)与写(Write)的基础知识

上一篇: C#,入门教程(27)——应用程序(Application)的基础知识https://blog.csdn.net/beijinghorn/article/details/125094837 C#知识比你的预期简单的多,但也远远超乎你的想象! 与文件相关的知识&#xf…

跟着我学Python进阶篇:03. 面向对象(下)

往期文章 跟着我学Python基础篇:01.初露端倪 跟着我学Python基础篇:02.数字与字符串编程 跟着我学Python基础篇:03.选择结构 跟着我学Python基础篇:04.循环 跟着我学Python基础篇:05.函数 跟着我学Python基础篇&#…

# Jenkins:一键部署与备份的终极解决方案

Jenkins:一键部署与备份的终极解决方案 引言 在持续集成和持续部署(CI/CD)的世界中,Jenkins 作为一个开源自动化服务器,扮演着至关重要的角色。但是,部署和维护 Jenkins 服务往往需要一定的技术知识和时间…

卷积和滤波对图像操作的区别

目录 问题引入 解释 卷积 滤波 问题引入 卷积和滤波是很相似的,都是利用了卷积核进行操作 那么他们之间有什么区别呢? 卷积:会影响原图大小 滤波:不会影响原图大小 解释 卷积 我们用这样一段代码来看 import torch.nn as …

【C++】入门(一)

前言&#xff1a; 本篇博客将带大家认识C&#xff0c;熟悉基本语法 文章目录 认识CC的诞生与发展C 在行业中的运用 一、命名空间1.1 命名空间的定义1.2 命名空间的使用1.3 命名空间的访问 二、C输入&输出输出操作符 <<输入操作符 >>换行符和刷新输出缓冲区关键…

C++入门学习(十二)字符串类型

上一节&#xff08;C入门学习&#xff08;十一&#xff09;字符型-CSDN博客&#xff09;中我们学到如何表示和使用一个字符串&#xff0c;本篇文章是字符串&#xff08;多个字符&#xff09;。 定义字符串主要有两种方式&#xff1a; 第一种&#xff1a; char str[] "…

openGauss学习笔记-203 openGauss 数据库运维-常见故障定位案例-修改索引时只调用索引名提示索引不存在

文章目录 openGauss学习笔记-203 openGauss 数据库运维-常见故障定位案例-修改索引时只调用索引名提示索引不存在203.1 修改索引时只调用索引名提示索引不存在203.1.1 问题现象203.1.2 原因分析203.1.3 处理办法 openGauss学习笔记-203 openGauss 数据库运维-常见故障定位案例-…

28、web攻防——通用漏洞SQL注入HTTP头XFFCOOKIEPOST请求

文章目录 $_GET&#xff1a;接收get请求&#xff0c;传输少量数据&#xff0c;URL是有长度限制的&#xff1b; $_POST&#xff1a;接收post请求&#xff1b; $_COOKIE&#xff1a;接收cookie&#xff0c;用于身份验证&#xff1b; $_REQUEST&#xff1a;收集通过 GET 、POST和C…