Linux系统运行时参数命令(性能监控、测试)(1)监控工具、CPU上下文切换、CPU性能监控

news2024/10/7 15:23:26

目录

  • 1. 监控工具
  • 2. CPU性能监控
    • 2.1 平均负载和CPU使用率
      • 2.1.1 平均负载基础
      • 2.1.2 使用uptime命令分析平均负载
      • 2.1.3 平均负荷和CPU使用率
    • 2.2 CPU上下文切换
      • 2.2.1 什么是CPU上下文切换
      • 2.2.2 有哪些上下文切换
      • 2.2.3 怎么查看上下文切换
  • vmstat
    • 2.3 遇到CPU使用率高该如何排查

主要分为四大块:CPU,内存,磁盘,网络

1. 监控工具

  • free
  • ping
  • vmstat(VirtualMemoryStatistics)虚拟内存统计,是Linux中监控内存的常用工具,可对操作系统的虚拟内存、进程、CPU等的整体情况进行监视。
  • iostat 用于报告中央处理器(CPU)的统计信息和整个系统、适配器、tty设备、磁盘和CD-ROM的输入/输出统计信息
  • dstat 显示了cpu的使用情况,磁盘io情况,网络发包情况和换页情况,输出是彩色的,可读性较强,相对于vmstat和iostat的输入更加详细且较为直观
  • pidstat 主要用于监控全部或指定进程占用系统资源的情况,如CPU、内存、设备IO、任务切换、线程等
  • top 汇总区域显示了五个方面的系统信息性能:
  1. 负载:时间,登录用户数,系统平均负载
  2. 进程状态:运行(R),睡眠(S),停止(T),僵尸(Z)
  3. cpu使用率:用户态,内核态,NICE,空闲,等待IO,中断等
  4. 内存使用:总量,已用,空闲(系统角度),缓冲区,缓存
  5. 交换分区:总量,已用,空闲
  • iotop Linux进程实时监控工具,界面风格类似top命令
  • htop 是Linux系统中的一个互动的进程查看器,一个文本模式的应用程序(在控制台或者X终端中),需要ncurses
  • mpstat Report process related statistics. 报告CPU的统计信息
  • netstat 用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况
  1. netstat -npl可以查看你要打开的端口是否已经打开
  2. netstat -rn打印路由表信息
  3. netstat -in提供系统上的接口信息,打印每个接口的MTU,输入分组数,输入错误,输出分组数,输出错误,冲突以及当前的输出队列的长度
  • ps 显示当前进程的状态
  • strace Trace system call and signals。跟踪程序执行过程中产生的系统调用及收到的信号,帮助分析程序或命令执行中遇到的异常情况
  • ltrace A library call tracer 跟踪进程调用库函数的情况
  • uptime 能够打印系统总共运行了多长时间和系统的平均负载,uptime命令最后输出的三个数字的含义分别是1分钟,5分钟,15分钟内系统的平均负荷
  • lsof (list open file)是一个列出当前系统打开文件的工具
  • perf 是Linux kernel自带的系统性能优化工具。优势在于与Linux kernel的紧密结合,它可以最先应用到加入kernel的new feature,用于查看热点函数,查看cache miss的比率,从而帮助开发者来优化程序性能
  • tcpdump能够动态抓取正在进行的网络通讯
  • sar
  • blktrace

(1)Linux observability tools | Linux 性能观测工具
在这里插入图片描述

(2)Linux benchmarking tools | Linux 性能测评工具
在这里插入图片描述
(3)Linux tuning tools | Linux 性能调优工具
在这里插入图片描述
是一款性能调优工具,主要是从linux内核源码层进行的调优

(4)Linux observability sar | linux性能观测工具
在这里插入图片描述
sar(System Activity Reporter系统活动情况报告)是目前LINUX上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等方面。

sar的常归使用方式:sar [options] [-A] [-o file] t [n]
其中:
t为采样间隔,n为采样次数,默认值是1;
-o file表示将命令结果以二进制格式存放在文件中,file 是文件名,options 为命令行选项。

想要更深的了解可以点击 【性能测试】Linux性能监控命令——sar详解

2. CPU性能监控

2.1 平均负载和CPU使用率

2.1.1 平均负载基础

平均负载是指单位时间内,系统处于可运行状态和不可中断状态的进程数,也就是平均活跃进程数,它和CPU使用率并没有直接关系。

  • 可运行状态的进程,是指正在使用CPU或者正在等待CPU的进程,也就是我们常用ps命令看到的,处在R状态(Running和Runable)的进程
  • 不可中断状态的进程是正处于内核态关键流程中的进程,并且这些进程是不可打断的,比如最常见的是等待硬件设备的I/O响应,也就是我们在ps命令中看到的D状态(Uninterruptible Sleep,也称为Disk Sleep)

平均负载其实就是平均活跃进程数。平均活跃进程数,直观上的理解就是单位时间内的活跃进程数。

2.1.2 使用uptime命令分析平均负载

查看机器的启动时间、登录用户、平均负载等情况,通常用于在线上应急 或者技术攻关中,确定操作系统的重启时间。

  1. 负载说明(针对单核情况,不是单核时则乘上核心数)
  • load < 1:没有等待
  • load == 1 :系统已无额外的资源跑更多的进程了
  • load > 1 :进程需要等待资源而阻塞住了
  1. 注意
  • load < 0.7时:系统很闲,要考虑多部署一些服务
  • 0.7 < load < 1.0时:系统状态不错
  • load == 1时:系统马上要处理不过来了,赶紧找一下原因
  • load > 5时,系统已经非常繁忙了
  1. 不同load值说明的问题
  • 1分钟load > 5,5分钟load < 3,15分钟load < 1
    短期内繁忙,中长期空闲,初步判断是一个抖动或者是拥塞前兆
  • 1分钟load > 5,5分钟load > 3,15分钟load < 1
    短期内繁忙,中长期紧张,很可能是一个拥塞的开始
  • 1分钟load > 5,5分钟load > 5,15分钟load > 5
    短中长期都繁忙,系统正在拥塞
  • 1分钟load < 1,5分钟load > 3,15分钟load > 5
    短期内空闲,中长期繁忙,不用紧张,系统拥塞正在好转

举个例子,假设我们在一个单CPU单核的系统上看到平均负载为1.73(1分钟),0.60(5分钟),7.98(15分钟),那么说明在过去的1分钟内,系统有73%的超载;在15分钟内,有698%的超载,从整体趋势来看,系统的负载正在降低。

2.1.3 平均负荷和CPU使用率

平均负载是指单位时间内,系统处于可运行状态和不可中断状态的进程数。所以,它不仅包括了正在使用CPU的进程,还包括等待CPU和等待I/O的进程。
CPU使用率,是单位时间内CPU繁忙情况的统计,跟平均负载并不一定会完全对应。比如:

  • CPU密集型进程,进程大部分时间在使用CPU进行计算,此时这两者是一致的;
  • I/O密集型进程,等待I/O也会导致平均负载升高,但CPU使用率不一定很高
  • 大量等待CPU的进程调度也会导致平均负载升高,此时的CPU使用率也比较高。

2.2 CPU上下文切换

2.2.1 什么是CPU上下文切换

所谓的上下文切换,就是把上一个任务的寄存器和计数器信息保存下来,然后加载新任务的寄存器和计数器信息,最后跳转到新任务的位置开始执行新任务。
根据任务的不同,CPU的上下文切换就可以分为几个不同的场景:进程上下文切换、线程上下文切换、中断上下文切换。

2.2.2 有哪些上下文切换

  1. 系统调用上下文切换
  • linux进程既可以在用户空间运行,又可以在内核空间运行
  • 当它在用户空间运行时,被称为进程的用户态;当它进入内核空间运行时,被称为进程的内核态。
  • 用户使用系统调用时,会发生从用户态到内核态的转变
  • CPU寄存器里原本存储的是用户态的指令。但是为了执行内核代码,需要先把用户态指令的执行位置保存起来,然后寄存器更新为内核态指令的新位置。最后跳转到内核态执行内核任务。
  • 当系统调用结束后,CPU寄存器需要恢复原来保存的用户态位置,然后再切换到用户空间,继续执行下面的指令。因此,一次系统掉用产生了两次的CPU上下文切换
  • 系统调用过程中对用户态的资源没有任何影响,也不会切换进程,所以也成为特权模式切换
  1. 进程上下文切换
  • 进程是由内核来管理和调度的,所以进程的切换只发生在内核态。进程的上下文不仅包括了虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的状态信息
  • 进程的上下文切换在保存当前进程的内核状态和CPU寄存器之前,需要先把该进程的虚拟内存、栈等保存下来。
  • 而加载了下一进程的内核态后再刷新进程的虚拟内存映射关系和用户栈,刷新虚拟内存映射就涉及到TLB快表(虚拟地址缓存),因此会影响内存的访问速度
  • 单次进程上下文的CPU切换时间在几十纳秒到数微秒之间。特别是在进程上下文切换次数较多的情况下,很容易导致CPU将大量时间耗费在寄存器、内核栈以及虚拟内存等资源的保存和恢复上,进而影响CPU的实际使用效率。

进程上下文切换的原因:

  • 其一,为了保证所有进程可以得到公平的调度,CPU时间被划分为一段段的时间片,这些时间片再被轮流分配给各个进程。这样,当某个进程的时间片耗尽了,就会被系统挂起,切换到其他就绪的进程运行。(被动切换
  • 其二,进程在系统资源不足的时候,也会被挂起,并由系统调度其他进程继续运行。(主动切换
  • 其三,当进程通过睡眠函数sleep这样的方式将自己主动挂起时,也会重新调度其他的进程继续运行。
  • 其四,当有优先级更高的进程需要运行时,为了保证高优先级进程先执行,当前进程会被挂起,由高优先级进程先运行。
  • 其五,当发生硬件中断时,CPU上的进程会被中断挂起,转而执行内核中的中断服务程序。
  1. 线程上下文切换
    线程与进程的区别在于:线程是调度的基本单位,而进程是系统分配资源的基本单位。内核中的任务调度,实际调度的是线程(执行流);而进程只是给线程提供了虚拟地址空间、全局变量等资源。
  • 当一个进程只有一个线程时,可以认为进程就等于线程
  • 当一个进程拥有多个线程时,共享虚拟地址空间和全局变量等资源。这些资源在同一进程内的线程切换时不需要修改,在不同进程的线程间进行切换时,因为资源不共享,所以切换过程和进程上下文切换是一样的
  • 线程也有自己的私有数据,比如线程私有栈和寄存器等,这些在切换时需要保存起来
  1. 中断上下文切换
    为了快速响应硬件的事件,中断处理会打断进程的正常调度和执行,转而转向中断处理程序,响应设备事件。在中断结束后,进程通过保存的上下文信息和程序计数器,又可以恢复先前的执行状态。
    跟进程的上下文不同,中断上下文并不涉及到用户态。中断上下文只包括内核态中中断服务程序执行所必需的状态,包括CPU寄存器、内核堆栈、硬件中断参数等。

2.2.3 怎么查看上下文切换

vmstat

查询系统的上下文切换情况。此命令显示关于内核线程、虚拟内存、磁盘I/O和CPU占用率的统计信息
vmstat的常规用法:vmstat [interval] [times],每隔interval秒采样一次,共采样times次,如果省略times,则一直采集数据,直到用户手动停止(ctrl+c)为止。
第一行显示了系统自启动以来的平均值,第二行开始显示现在正在发生的情况,接下来的行会显示每5秒间隔发生了什么,每一列的含义在头部,如下所示:
在这里插入图片描述

  1. procsr列 (Running or Runable)是就绪队列的长度,显示了有多少进程在等待cpu,b列(blocked)显示多少进程正处于不可中断的休眠状态(等待IO)。
  2. memoryswpd列显示了多少块被换出了磁盘(页面交换),free列显示了多少块是空闲的(未被使用),buff列是I/O系统存储的磁盘块文件的元数据的统计信息,cache列是操作系统用来缓存磁盘数据的,操作系统会自动调节这一参数,在内存紧张时会减少cache的占用空间来保证其他进程对内存的使用。
  3. swap:显示交换活动:每秒有多少块正在被换入(从磁盘)和换出(到磁盘)。si和so较大时,说明系统频繁使用交换区,应该查看操作系统的内存是否够用
  4. io:显示了多少块从块设备读取(bi)写出(bo),通常反映了硬盘I/O。
  5. system:显示每秒中断(in)上下文切换(cs) 的数量。
  6. cpu:显示所有的cpu时间花费在各类操作的百分比,包括执行用户代码(us),执行系统代码(sy),空闲(id)以及等待IO(wa)。
  7. 内存不足的表现:free memory急剧减少,回收buffer和cacher也无济于事,大量使用交换分区(swpd),页面交换(swap)频繁,读写磁盘数量(io)增多,缺页中断(in)增多,上下文切换(cs)次数增多,等待IO的进程数(b)增多,大量CPU时间用于等待IO(wa)

2.3 遇到CPU使用率高该如何排查

遇到CPU使用率高时,首先确认CPU消耗是在哪一块,如果是内核态占用CPU较高:

  1. %iowait高,这是要重点关注磁盘IO的相关操作,是否存在不合理的写日志操作,数据库操作等;
  2. %soft或%cs高,观察CPU负载是否较高、网卡流量是否较大,可不可以精简数据、代码是否在多线程操作上存在不合理的中断等;
  3. %steal高,这种情况一般发生在虚拟机上,这时要查看宿主机是否资源超限;

如果是用户态占用CPU较高,且没有达到预期的性能,说明应用程序需要优化。

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

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

相关文章

openGauss5.0之学习环境 Docker安装

文章目录 0.前言1. 准备软硬件安装环境1.1 软硬件环境要求1.2 修改操作系统配置1.2.1 关闭操作系统防火墙 1.3 设置字符集参数1.4 设置时区和时间&#xff08;可选&#xff09;关闭swap交换内存1.5 关闭RemoveIPC1.6 关闭HISTORY记录 2. 容器安装2. 1支持的架构和操作系统版本2…

大语言模型之人类反馈学习RLHF

在2017年左右&#xff0c;深度强化学习&#xff08;Deep Reinforcement Learning&#xff09;逐渐兴起并引起广泛关注。特别是在2017年6月&#xff0c;OpenAI与Google DeepMind联合推出了一项名为《Deep Reinforcement Learning from Human Preferences》&#xff08;RLHF&…

chatgpt赋能python:Python如何判断整数

Python如何判断整数 Python是一个简单易学的编程语言&#xff0c;但是对于初学者来说&#xff0c;判断整数可能会有一些困难。在本文中&#xff0c;将介绍Python如何判断整数&#xff0c;并提供一些示例帮助您更好地理解。 如何判断整数 在Python中&#xff0c;判断整数可以…

Skywalking环境搭建

Skywalking环境搭建 elasticsearch环境搭建Skywalking环境搭建 elasticsearch环境搭建 接下来我们在虚拟机CentOS中搭建Skywalking的可观测性分析平台OAP环境。Skywalking默认使用H2内存进行数据的存储&#xff0c;我们可以替换存储源为ElasticSearch保证其查询的高效及可用性…

运行后端SpringBoot项目

目录 一、注册微信开发者账号 1. 注册开发者账号 2. 获取appid和密钥 二、开通腾讯云TRTC服务 1. TRTC业务介绍 2. 为什么不使用阿里云的实时音视频服务&#xff0c;偏要选用腾讯云TRTC服务&#xff1f; 3. 开通TRTC服务 4. 领取TRTC的AppID和密钥 三、导入 emos-api …

Geant4安装记录,15.5.0VMware + 11.0.0G4 + 18..04.1 ubuntu

仅仅是记录学习使用&#xff0c;有问题请联系 Geant4安装前准备 &#xff08;1&#xff09;安装虚拟机&#xff0c; VMware 15.5 &#xff08;2&#xff09;在虚拟机上安装ubuntu 以上两个步骤在网上有很多教程&#xff0c;安装很简单&#xff0c;大家自行安装即可 这里记录…

【前端验证】通关寄存器与ral_model —— 25种常用寄存器类型全览

寄存器的属性分类 本文档对于寄存器的属性以synopsys相关文档以及ral_model生成模型时的识别方式为基准。通常讲可以归纳为以下三个方面&#xff1a;读写属性read-write access、写后值modified write value、读后操作read action。注意&#xff0c;这里指的都是软件的操作&am…

chatgpt赋能python:Python怎么升序排序

Python怎么升序排序 排序是我们经常会用到的一种操作&#xff0c;而在Python中&#xff0c;对于列表或数组等序列类型的数据&#xff0c;我们可以使用内置的sorted()函数来进行排序操作。而在排序时&#xff0c;升序排序是我们最常用的一种。 Python中的sorted()函数 sorted…

关于uni-app与vue路由配置的不同,不使用uni.navigateTo接口跳转时,使用this.$router.push的踩坑经验

目录 懵逼的一个小时 uni-app与vue路由配置的不同 非官方接口的另类写法 错误编写&#xff1a; 正确编写&#xff08;只需写父组件即可&#xff0c;其他是多余&#xff09;&#xff1a; 懵逼的一个小时 之前用vue写router路由的时候&#xff0c;先配置一个路由表&am…

chatgpt赋能python:Python怎么删除列表中的最大值和最小值

Python怎么删除列表中的最大值和最小值 在Python中&#xff0c;一个列表&#xff08;List&#xff09;是一种非常常见的数据结构&#xff0c;它允许我们以有序的方式存储和访问数据。但是&#xff0c;有时候我们需要从列表中删除最大或最小的值&#xff0c;以满足我们的特定需…

哈希表原理,以及unordered_set/和unordered_map的封装和迭代器的实现

哈希表 unordered系列unordered_set和unordered_map的使用哈希哈希概念哈希冲突哈希函数闭散列开散列哈希表的扩容哈希表源码&#xff08;开散列和闭散列&#xff09; 封装unordered_set/和unordered_map&#xff0c;以及实现迭代器节点定义unordered_set定义unordered_map定义…

Python3 flask-socketio 整合vue

1. 前端说明 前端追加了vue-socket.io的依赖 更新package.json及package-lock.json后&#xff0c;需要补充库 2. 后端说明 服务端需要安装的python包 suse python 3.6.12 Flask_SocketIO-4.3.1-py2.py3-none-any.whl python_socketio-4.6.0-py2.py3-none-any.whl python_…

在PPT里如何做出晶莹剔透的高级水泡感出来呢

开篇 很多PPT特别是一些TED演讲类PPT,它的首页开篇给人以强烈的冲击感。比如说上面这张PPT,笔者就卖出过一页800元的效果。它的高级高级在以下两个地方: 水晶感;透明感这是时下非常流行的一种TED场景式演讲专用的PPT,适用于一些大厂的CTO、CEO都大量使用这种效果。 今天…

shell脚本编写辅助命令

目录 一、echo 命令 二、字符串相关操作 1.截取字符串 2.获取字符串长度 3.字符串追加字符 4.从开头或结尾删除字符串指定格式内容 三、随机数 1.使用 $RANDOM 2.指定RANDOM变量的范围 &#xff08;1&#xff09;从0开始的范围 &#xff08;2&#xff09;从指定数始…

35、git的使用

一、git简介 git是一款免费、开源的版本控制系统&#xff0c;用于高效地处理任何或大或小的项目。 作用&#xff1a; 文件存档备份 文件版本管理 多人协同合作&#xff08;自动合并&#xff09; 二、git的三个区域 工作区&#xff1a;处理工作的区域 暂存区&#xff1a;临时存放…

Shell脚本实现数组冒泡排序等简单算法排序

目录 一、冒泡排序 1.简介 2.基本思想 3.算法思路 4.shell脚本实现 二、选择排序 1.简介 2.基本思想 3.shell脚本实现 三、插入排序 1.算法思路 2.shell脚本实现 四、反转排序 1.作用 2.shell脚本实现 一、冒泡排序 1.简介 类似气泡上涌的动作&#xff0c;会将…

Java入门之学习随记(三)

一. 栈内存和堆内存 堆内存:存放"引用数据类型的数据"和"new出来的对象",注意-创建出来的对象只包含各自的成员变量,不包括成员方法. 栈内存:存放"基本数据类型的数据","引用数据类型的变量名"以及"对象的引用",但是引用数…

k8s之ReplicaSet回收pod的优先级

ReplicaSet syncReplicaSet的逻辑&#xff0c;首先找到rs下相关的pod // 从informer中获取当前ns下所有的podallPods, err : rsc.podLister.Pods(rs.Namespace).List(labels.Everything())if err ! nil {return err}// 忽略不健康的podfilteredPods : controller.FilterActiveP…

CentOS桥接模式下设置静态IP并解决java.net.ConnectException: Connection timed out: connect

一、前言 最近在配置服务器&#xff0c;DHCP模式下IP地址不固定&#xff0c;每次SSH远程登录连接不上&#xff0c;都要查看新动态分配的IP地址重新配置&#xff0c;感觉些许麻烦&#xff0c;于是给机器配置了静态固定IP。 动态主机配置协议DHCP&#xff08;Dynamic Host Confi…

Shell脚本练习题(附详细解题过程)

目录 一、利用for循环打印99乘法表 二、十进制转二进制 三、将十进制ip地址转换为二进制格式 四、检测某个网段中存活的主机并输出其ip地址 五、检查文件中用户名是否存在并提示创建用户和设置密码 六、检查httpd服务并开启 七、根据百米赛跑成绩判断结果 八、随机数…