当前位置: 首页 > news >正文

使用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错误代码

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 面试题001:Java的特点和优点,为什么要选择Java?
  • 深入Redis集群部署:从安装配置到测试验证的完整指南
  • MybatisPlus的使用与详细讲解
  • 排序算法与复杂度介绍
  • Linux的shell的date命令
  • Spring Boot 与 Amazon S3:快速上传与下载文件的完整指南
  • 从PyTorch官方的一篇教程说开去(4 - Q-table来源及解决问题实例)
  • LeetCode 125.验证回文串 C++写法
  • RDMA通信4:MR(Memory Region, 内存区域)基本概念和作用
  • html改写vue日志
  • 【银河麒麟服务器操作系统】java进程oom现象分析及处理建议
  • 计数,桶与基数排序
  • 建投数据人力资源系列产品获得欧拉操作系统及华为鲲鹏技术认证书
  • vue2 使用代码编辑器插件 vue-codemirror
  • 力扣题解(组合总和IV)
  • 230. Kth Smallest Element in a BST
  • C++类的相互关联
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java 23种设计模式 之单例模式 7种实现方式
  • Java反射-动态类加载和重新加载
  • js学习笔记
  • Mysql数据库的条件查询语句
  • October CMS - 快速入门 9 Images And Galleries
  • Quartz初级教程
  • React 快速上手 - 07 前端路由 react-router
  • win10下安装mysql5.7
  • 简单数学运算程序(不定期更新)
  • 强力优化Rancher k8s中国区的使用体验
  • 设计模式(12)迭代器模式(讲解+应用)
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • #php的pecl工具#
  • #职场发展#其他
  • (1)(1.11) SiK Radio v2(一)
  • (145)光线追踪距离场柔和阴影
  • (C语言)fgets与fputs函数详解
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (论文阅读30/100)Convolutional Pose Machines
  • (三)elasticsearch 源码之启动流程分析
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .NET : 在VS2008中计算代码度量值
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .NET Core 项目指定SDK版本
  • .NET Core 中的路径问题
  • .NET 中 GetProcess 相关方法的性能
  • .net6 webapi log4net完整配置使用流程
  • .Net下的签名与混淆
  • @ComponentScan比较
  • @ohos.systemParameterEnhance系统参数接口调用:控制设备硬件(执行shell命令方式)
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • []C/C++读取串口接收到的数据程序
  • [C++]二叉搜索树