使用Top进行设备性能分析思路

Top命令

像windows一样,linux也有一个“进程管理”,可以在命令行执行 top ,就可以整体的查看当前机器的资源及进程情况。

在性能问题中,Top是使用较多的一个命令,一般用它可以从整体上了解系统的CPU、内存、IO情况,快速从全局上来找到问题爆发点。 

输出内容解释

Top是实时性的监控命令,会实时显示当前操作系统的整体性能情况,输出内容包扩两部分:全局资源信息和进程信息。

全局信息

这里的信息包括:

top (整体状态)
  • 系统时间:19:27:01
  • 运行时间:up 54 min,
  • 当前登录用户:  1 user
  • 负载均衡(uptime)  load average: 0.02, 0.03, 0.08

 average后面的三个数分别是1分钟5分钟15分钟的负载情况。

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

注:可以通过cat /proc/cpuinfo 查看服务器CPU详细信息

Tasks (进程情况)
  • total:进程总数
  • runing:在运行状态进程数
  • sleeping:睡眠进程数量
  • stopped:死亡进程数量
%CPU (CPU情况)
  • 0.0 us【user space】— 用户空间占用CPU的百分比。
  • 0.1 sy【sysctl】— 内核空间占用CPU的百分比。
  • 0.0 ni  改变过优先级的进程占用CPU的百分比
  • 99.9 id【idolt】— 空闲CPU百分比
  • 0.0 wa【wait】— IO等待占用CPU的百分比
  • 0.0 hi【Hardware IRQ】— 硬中断占用CPU的百分比
  • 0.0 si【Software Interrupts】— 软中断占用CPU的百分比
KiB Mem (内存情况)
  • total 内存总大小
  • free 空闲大小
  • used 已用大小
  • buff/cache 用于缓冲区的大小
KiB Swap (交换区)
  • total 系统配置的总交换空间大小,以千字节(KiB)为单位。这包括了所有交换分区和交换文件的总和。
  • used 已经被系统使用的交换空间大小,以千字节(KiB)为单位。这表示当前有多少数据被交换到了硬盘上。
  • free 尚未被使用的交换空间大小,以千字节(KiB)为单位。这表示还剩下多少交换空间可以被系统使用

具体进程信息

通常使用 -p参数指定具体进程,锁定具体进程的信息

top -p [PID] 

 

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 — 进程名称(命令名/命令行) 

性能分析思路

性能分析的核心最终都会聚焦在CPU、内存、磁盘IO,而出现性能问题,CPU、内存、磁盘IO也是最先显现的。所以top的综合性优势就在于可以快速发现上述三个维度出现问题的点(CPU飙高、内存溢出、IO瓶颈),再带着具体维度问题根据具体的进程信息锁定进程,最终定位到应用甚至代码问题。 

CPU使用分析

关于CPU的使用,可以直接通过top输出中的%CPU进行。针对CPU的参数项,常见以下几种情况:

  1. 高 us: 如果 us 持续很高,可能意味着用户空间的进程非常繁忙,这可能导致系统响应变慢。

  2. 高 sy: 如果 sy 持续很高,可能意味着系统空间的进程(如内核线程)非常繁忙,这可能表明系统正在处理大量的系统调用或内核任务。

内存使用分析

为了更好的进行内存分析之前,需要先搞清除swap和buffer/cache的原理

buffer/Cache缓冲区

  • 缓冲区(Buffer):

    缓冲区主要用于存储即将写入磁盘的数据。当应用程序写数据到磁盘时,数据首先被写入到缓冲区,然后操作系统会在合适的时机将缓冲区的数据刷新到磁盘上。这可以减少对磁盘的直接 I/O 操作次数,从而提高性能。
  • 缓存(Cache):

    缓存用于存储最近或频繁访问的数据。操作系统会将文件系统的数据、目录结构等信息缓存到内存中,这样当应用程序再次访问这些数据时,可以直接从内存中读取,而不需要重新从磁盘读取,从而加快访问速度。

buffer和cache多用在系统文件读取、网络通信、系统服务;

当应用程序读取或写入文件时,操作系统会使用缓冲区和缓存来暂存数据,减少磁盘 I/O 操作。

网络堆栈可能会使用缓冲区来暂存即将发送或接收的数据包,以提高网络通信的效率。

系统服务和守护进程可能会使用缓存来存储配置信息、状态信息等,以便快速访问。

swap

当系统物理内存吃紧时,Linux会将内存中不常访问的数据保存到swap上。当然从用户的角度来看就相当于内存变大了。但在内部其实是将一段物理磁盘即swap分区充当Wie内存来使用。当系统需要访问swap上存储的内容时,再将swap上的数据加载到内存中,所以就有换入和换出两个过程。

换出,就是把进程暂时不用的内存数据存储到磁盘中,并释放这些数据占用的内存。
换入,则是在进程再次访问这些内存的时候,把它们从磁盘读到内存中来。

Swap 看似把系统的可用内存变大了,但其实本质是虚拟内存,真实的读取速度并没有上升,更多的是为了保证内存的稳定和可用空间,因为数据在swap中,仍旧需求读取磁盘,而且,过分使用Swap,当Swap使用完,操作系统会触发OOM-Killer机制,把消耗内存最多的进程kill掉以释放内存

综上,对于使用top进行内存性能排查,主要有以下几种场景说明内存存在问题:

  • 高 used 低free: 如果 used 值非常高,接近 total 值,而free 值非常低,表示系统内存使用接近饱和,且没有足够的空闲内存供新进程使用,可能需要更多的内存或优化内存使用。

  • 当 buff/cache 占用较高时,可能意味着系统正在进行大量的数据读写操作,在没有其他异常时,可以考虑转向IO读取瓶颈。
  • 当 buff/cache 占用过低,可能意味着系统没有充分利用内存来提高性能。
  • 当 swap的free和total接近,则需要考虑是否系统的内存出现了问题

Linux 内核会动态管理 buff/cache 大小。当系统内存不足时,内核可以回收部分缓存用于其他目的。如果系统内存不足,内核可能会通过回收缓存来释放内存,这可能会导致性能下降,因为更多的数据需要从磁盘读取。

IO分析

在top的结果中,关于IO问题,需要在意的参数主要在%CPU,主要是IO与CPU的资源竞争。

高 wa: 如果 wa 持续很高,可能意味着系统正在等待 I/O 操作,这可能是磁盘 I/O 瓶颈的迹象。

详细的io分析可参考:iostat分析磁盘性能

根据进程定位具体代码

可参考:Linux上定位Java错误代码

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

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

相关文章

MongoDB教程(十七):MongoDB主键类型ObjectId

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言一、Object…

【状态机动态规划 状态压缩】1434. 每个人戴不同帽子的方案数

本文涉及知识点 位运算、状态压缩、枚举子集汇总 动态规划汇总 LeetCode 1434. 每个人戴不同帽子的方案数 总共有 n 个人和 40 种不同的帽子,帽子编号从 1 到 40 。 给你一个整数列表的列表 hats ,其中 hats[i] 是第 i 个人所有喜欢帽子的列表。 请你…

建投数据人力资源系列产品获得欧拉操作系统及华为鲲鹏技术认证书

近日,经欧拉生态创新中心和华为技术有限公司测评,建投数据自主研发的人力资源管理系统、招聘管理系统、绩效管理系统、培训管理系统,完成了基于欧拉操作系统openEuler 22.03、华为鲲鹏Kunpeng 920(Taisha 200)的兼容性…

ASP.NET MVC

ASP.NET MVC与.NET Framework关系 .NET Framework是一个庞大的代码库,能为多种编程语言提供支持(如C#、VB、F#等)。同时.NET Framework 提供了多种技术框架,ASP.NET MVC是.NET Framework提供的众多技术框架中的一种,用于开发Web应用。 .NET …

B端:小小详情页蕴藏大学问,附大量案例 。

在B端(Business-to-Business,即企业与企业之间的商业模式)的设计中,详情页是一个非常重要的环节。虽然它可能看起来只是一个简单的页面,但实际上其中蕴藏着许多大学问。 用户需求与体验: 在B端设计中&…

【微信小程序】wx.navigateTo传参时不能使用const定义的数据类型

2024年7月21日更新 今日调试时发现似乎是因为使用vant-weapp时按照官方提示关闭了style:"v2"导致的此情况,打开之后无法复现该内容,特此提示。 以下是原内容 如题,笔者测试了好久才找到这个bug,想传递的数据是this.d…

QT老版本下载指南

由于某些原因,qt限制ip了,老版本打开时提示:Download from your IP address is not allowed,如果你会爬梯子,那你肯定可以看到滤掉了的内容(包括文件、子文件夹等)。 当然顺便说一下&#xff0c…

【Docker】Docker-consul容器服务自动发现与注册

目录 一.Consul概述 1.解决了什么问题 2.什么叫微服务或者注册与发现 3.consul的模式 4.相关命令 二.consul 部署 1.consul服务器部署 2.部署docker容器 3.Nginx负载均衡器 3.1.安装启动nginx 3.2.配置nginx负载均衡 3.3.创建配置consul complate模板文件 3.4.添加…

mariadb安装centos再次踩坑

在 CentOS 系统上安装 MariaDB 数据库服务器可以通过 yum 包管理器或者 dnf (在较新版本的 CentOS 上) 来完成。以下是安装过程的详细步骤: 准备工作 确保你的 CentOS 系统是最新的: sudo yum update 安装 MariaDB MariaDB 通常会被包含在 CentOS 的默认…

基于Qt的上位机通用框架

0.前言 最近一年多的时间一直在开发设备控制相关的软件,加上之前在聚光的两年时间,前前后后开发这种设备控制类型的上位机软件也有三年的时间了。总结出了一套基于Qt的上位机编程框架,核心思想类似于C#的依赖注入,对象的初始化都…

JavaScript青少年简明教程:流程控制语句

JavaScript青少年简明教程:流程控制语句 JavaScript 提供了一系列的流程控制语句,用于控制代码的执行顺序。 条件语句 条件语句根据表达式的真假来执行不同的代码块。 if 语句 用于在条件为真时执行代码块。 语法: if(条件){ 条件满足执…

微信小程序获取蓝牙并实现内容打印

通过微信小程序如何实现获取蓝牙打印机并实现打印能力&#xff0c;之前做过一个测试Dome&#xff0c;能够获取附近的蓝牙打印机设备并实现打印,今天开放出来供大家参考。 wxml <!--右下角搜索--> <view class"ly-cass-box"><view class"ly-cas…

WHAT - 通过 shadcn 组件源码学习 React

目录 一、button1. 导入部分2. 定义按钮的样式变体1. variant2. size总结 3. 定义按钮的属性类型4. 定义按钮组件5. 导出组件和样式变体总结 二、multi-select多选组件的核心上下文与状态1. 上下文与钩子2. MultiSelector 组件 组件子部分1. MultiSelectorTrigger2. MultiSelec…

Hadoop、HDFS、MapReduce 大数据解决方案

本心、输入输出、结果 文章目录 Hadoop、HDFS、MapReduce 大数据解决方案前言HadoopHadoop 主要组件的Web UI端口和一些基本信息MapReduceMapReduce的核心思想MapReduce的工作流程MapReduce的优缺点Hadoop、HDFS、MapReduce 大数据解决方案 编辑 | 简简单单 Online zuozuo 地址…

广义线性模型(1)广义线性模型详解

一 GLM概述 广义线性模型&#xff08;Generalized Linear Models&#xff0c;GLM&#xff09;由 Nelder 和 Wedderburn 于 1972年提出和发表 &#xff0c;旨在解决普通线性回归模型无法处理因变量离散&#xff0c;并发展能够解决非正态因变量的回归建模任务的建模方法。 在广…

数据结构:二叉搜索树(简单C++代码实现)

目录 前言 1. 二叉搜索树的概念 2. 二叉搜索树的实现 2.1 二叉树的结构 2.2 二叉树查找 2.3 二叉树的插入和中序遍历 2.4 二叉树的删除 3. 二叉搜索树的应用 3.1 KV模型实现 3.2 应用 4. 二叉搜索树分析 总结 前言 本文将深入探讨二叉搜索树这一重要的数据结构。二…

postman使用旧版本报错version mismatch detected

卸载 postman又重装了别的版本&#xff0c;打开后遇到了这个报错&#xff0c;解决办法如下&#xff1a; 删除缓存文件 C:\Users\Administrator\AppData\Roaming\Postman 下载PostMan 提取码&#xff1a;6k51

【PyTorch】单目标检测项目

对象检测是在图像中查找特定对象位置的过程,用于处理单对象或多对象检测问题。单对象检测在给定图像中仅定位一个对象。对象的位置可以通过边界框定义。单对象检测使用四个数字预测边界框。对于正方形物体&#xff0c;可以固定宽度和高度&#xff0c;并简化问题以仅预测两个数字…

Unity:PC包直接查看Log日志

PC端会输出Log日志&#xff0c;位置在&#xff1a; C:\Users\用户名\AppData\LocalLow\公司名\项目名 在这里可以找到类似的文件&#xff1a; 打开便可以看到打印。

解决 elementUI 组件在 WebStorm 中显示为未知标签的问题

解决 elementUI 组件在 WebStorm 中显示为未知标签的问题 一、问题 自从转到 ts 之后&#xff0c;编辑器就一直提示用到的 elementUI 标签未知&#xff0c;一直显示一溜黄色警示&#xff0c;很烦&#xff1a; 二、解决 把它改成大写就可以了。 如下&#xff1a; 把整个项目…