Linux下从CPU/内存/IO三个方面来分析系统性能

news2024/10/7 19:28:26

在实际生产环境中是否遇到如下问题?
系统平均负载过高。
CPU使用率过高。
硬盘利用率已经饱和,IO存在瓶颈。

首先明确一下进程的常见6种状态
R运行状态(running):并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列。
S睡眠状态(sleeping)
D磁盘休眠状态(Disk sleep):有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。
T停止状态(stopped)
Z僵尸状态(Zombies)
X死亡状态(dead)

目录

一.sysstat软件包

二.性能分析常用工具

三.性能问题的常见情况

3.1 查看OS的日志

3.2 查看系统平均负载 

3.3 平均负载与CPU利用率

3.4 系统平均负载高同时CPU使用率也高

3.5 系统平均负载高但CPU使用率不高

3.6 由于CPU上下文切换频繁导致系统平均负载升高

3.7 内存不足引起的OS性能下降


一.sysstat软件包

        sysstat软件包是一组包含监测系统性能及效率的工具套件,这些工具用于我们收集系统性能数据。比如CPU使用率、硬盘和网络吞吐数据,这些数据的收集和分析,有利于我们判断系统是否正常运行,是提高系统运行效率、安全运行服务器的得力助手。sysstat软件包一般包含如下工具:
sar
iostat
sa1
sa2
sadf
mpstat
sadc
sysstat

sysstat工具包包含两类工具:
即时查看工具:iostat  mpstat sar
累计统计工具:sar
sar 具有这两种功能。因此,sar 是 sysstat 中的核心工具。sar(System Activity Reporter)是系统活动情况报告的缩写。
这些命令有的是服务,有的是查看结果的命令。也有的是即时服务器CPU,内存以及网络的使用率
比如先要打开sa1 sa2或者sysstat 才能使用sar sadf sadc
还有即时服务器的CPU,内存,网络使用率的命令,比如:mpstat iostat

为了实现sar的累计统计,系统必须周期地记录当时的信息,这是通过调用如下三个工具实现的:
sa1: 收集并存储每天系统动态信息到一个二进制的文件中,用作 sadc 的前端程序
sa2: 收集每天的系统活跃信息写入总结性的报告,用作 sar 的前端程序
sadc: 系统动态数据收集工具,收集的数据被写入一个二进制的文件中,它被用作 sar 工具的后端

工具具体使用可参考:http://www.ctohome.com/FuWuQi/1b/688.html

安装
1.命令行安装
sudo apt install sysstat

 2.源码编译安装
1)源码下载
http://perso.wanadoo.fr/sebastien.godard/ 下载最新的版本源码包,比如我下载的是sysstat-5.1.1.tar.gz
2)解包:
ar zxvf sysstat-5.1.1.tar.gz
3)编译安装
cd sysstat-5.1.1
make config
这个命令就是用来配置sysstat安装的,如果不用这个命令,可以直接安装到其默认的/usr/local/lib目录中
make
make install

二.性能分析常用工具

CPU利用率:top,mpstat,sar -w, vmstat
内存利用率:free
IO吞吐率:throughput, iops, iostat -x

三.性能问题的常见情况


3.1 查看OS的日志

比如/var/log/messages里面是否有error,fail,warn等信息

3.2 查看系统平均负载 

        使用uptime查看系统平均负载,从这个命令的load average可以知道系统最近 1 分钟、5 分钟、15 分钟的系统平均负载。系统平均负载指的是处于可运行或不可中断状态的平均进程数,理想状态下,每个逻辑CPU运行一个进程,因此例如当前系统的逻辑CPU数量是12,理想状态load average也应该是12,上图的load average是2左右,则表示有CPU处于空闲状态。

3.3 平均负载与CPU利用率

        由于系统平均负载反映的是处于R状态和D状态的进程数,因此不代表CPU的使用率就是高,这两者没有必然的联系。对于计算密集型任务较多的场景来说,系统平均负载的升高意味着CPU使用率上升。但是对于IO密集型任务较多的场景来说,系统平均负载升高时CPU利用率通常都不高,因为有很多进程都处于D状态。
1) 如果系统平均负载率很高同时CPU的使用率也很高,则需要考虑的是系统可能遇到了CPU瓶颈,需要去定位CPU方面的原因。
2) 如果系统平均负载率很高,但是CPU的使用率不高,则需要考虑的是系统可能遇到了IO瓶颈,需要去定位IO方面的原因。

3.4 系统平均负载高同时CPU使用率也高

       需要去定位CPU方面的原因。
1) 首先使用下面的命令查看每一秒的CPU的核心的变化信息:
mpstat -P ALL 1
2) 使用pidstat命令去查看进程占用的CPU情况:
pidstat -u 1

3.5 系统平均负载高但CPU使用率不高

       需要去定位IO方面的原因。
1) 首先使用下面的命令查看每一秒的CPU的核心的变化信息:
mpstat -P ALL 1
可以看到iowait占用比较高
2) 使用sar -d -p 1查看哪个块设备的使用率比较高。
3) 使用pidstat -d 1命令查看具体是哪个进程导致IO升高的。

3.6 由于CPU上下文切换频繁导致系统平均负载升高

        一般每次上下文切换都需要几十纳秒到数微秒的 CPU 时间,如果切换较多还是很容易导致 CPU 时间的浪费在寄存器、内核栈以及虚拟内存等资源的保存和恢复上,
这里同样会导致系统平均负载升高。
1) 通过下面的命令查看系统上下文切换:
vmstat 1
2)使用pidstat查看具体的进程上下文切换信息,以判断是哪个。
pidstat -u 1 -w -t
说明大部分sysbench进程都在被强制调度,也就是在争抢CPU资源,说明CPU成为了性能瓶颈。

3.7 内存不足引起的OS性能下降

        可以通过下面的方法去排查:
1) 首先查看dmesg日志,查看是否有Out of memory打印,如果有,说明有程序在申请内存时失败,内存不足,这种情况有可能由两种原因引起。一是物理内存不足,二是内存碎片化严重,导致后面的程序申请大片连续内存时无法分配成功。
2) 通过sar -r 1命令去查看当前的内存的使用率,主要看%memused,如果使用率超过了90%,说明物理内存已经不足。
3) 通过sar -W 1命令查看交换分区的活动,如果pswpin/s和pswpout/s的值比较高,说明物理内存已经不足,正常这个值是0。
4) 通过vmstat -a命令中的swpd查看交换分区使用的大小,以此进一步判断物理内存是否已经不足。
5) 通过pidstat -r 1命令查看%MEM域,查看哪些进程占用的内存过多。
 

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

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

相关文章

钉钉聊天对话框和截图经常发生白屏

环境: 7.0.30-rel6019102 Win10专业版 L盾加密环境 问题描述: 钉钉聊天对话框和截图经常发生白屏 解决方案: 1.【电脑端钉钉】- 左上角【头像】-【设置】-【高级】- 下拉【网络检测】- 点击【开始检测】 如果变红说明网络有问题&#x…

redis安装后启动报redis-server.exe redis.windows.conf

文章目录 1. 报错的内容2. 解决方法:(亲测有效) 1. 报错的内容 redis安装后启动报redis-server.exe redis.windows.conf 完整报错如下: 2. 解决方法:(亲测有效) 先使用命令切换到redis安装目…

Redis常用命令操作

#linux是redis-cli #普通环境 redis-cli.exe -h host -p port -a password #集群环境,否则报:(error) MOVED 6918 127.0.0.1:6381 redis-cli.exe -c -h host -p port -a password#参数说明 #host:远程redis服务器host #port:远程r…

开发人员必备:9个令人惊叹的CSS网格生成器推荐!

微信搜索 【大迁世界】, 我会第一时间和你分享前端行业趋势,学习途径等等。 本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试完整考点、资料以及我的系列文章。 快来免费体验ChatGpt plus版本的,我们出的钱 体验地…

【分布式应用】zabbix 二:自定义监控、自动发现与自动注册

目录 一、添加zabbix客户端主机1.1环境设置1.2配置zabbix-angent1.3在 Web 页面中添加 agent 主机 二 、自定义监控内容2.1客户端自定义key2.2在Web页面创建自定义监控模板 三、zabbix自动发现四、zabbix自动注册 一、添加zabbix客户端主机 1.1环境设置 systemctl disable --…

2490. 回环句

句子 是由单个空格分隔的一组单词,且不含前导或尾随空格。 例如,"Hello World"、"HELLO"、"hello world hello world" 都是符合要求的句子。 单词 仅 由大写和小写英文字母组成。且大写和小写字母会视作不同字符。 如果…

查询例题(三道)

一、 写法一: 写法二: 二、 1、内连接: 一个部门下有哪些人,找的相关联的数据 2、左外连接: 以部门表为基准,部门下面没有人,但是也会查询出来 3、右外连接: 以员工表为基准&#…

【Spring 丨数据绑定】

数据绑定 概述Databinder核心属性绑定参数绑定元数据绑定验证 概述 Spring 数据绑定(Data Binding)的作用是将用户的输入动态绑定到应用程序的领域模型JavaBean(或用于处理用户输入的任何对象)。 也就是说,Spring数据绑定机制是将属性值设置到目标对象中。如下图所示…

Bug小能手系列(python)_9: 使用sklearn库报错 module ‘numpy‘ has no attribute ‘int‘

AttributeError: module numpy has no attribute int. 0. 错误介绍1. 环境介绍2. 问题分析3. 解决方法3.1 调用解决3.2 库包中存在报错 4. 总结 首先,对于自己使用代码dtypenp.int报错的情况,建议直接修改为np.int_即可解决,也不用向下看了&a…

Python3安装教程在Unix/Linux操作系统

在Linux操作系统上安装Python3教程,先下载Python3安装包: Python3下载:https://www.python.org/downloads/source/ 选择适用于 Unix/Linux 的源码压缩包。下载及解压压缩包 Python-3.x.x.tgz,3.x.x 为你下载的对应版本号。如果你…

triton客户端使用

model_analyzer 简介: Triton Model Analyzer is a CLI tool which can help you find a more optimal configuration, on a given piece of hardware, for single, multiple, ensemble, or BLS models running on a Triton Inference Server. Model Analyzer wil…

SSM框架训练 实现各个功能时遇到的常见问题

快速复制当前代码到下一行:ctrlD 格式化代码(快速整理代码):ctrilaltL 一步一步来,后续会不停添加功能。 先创建项目结构:搭建框架 (36条消息) SSM框架模板(高配:一次性配完所有…

指针进阶1

目录 本章将学习 1字符指针 2数组指针与指针数组 3数组传参与指针传参 复习指针初阶基本知识点 1指针是个地址(编号),指针变量是存放指针的变量,但是我们平常所说的指针就是指的指针变量,指针变量的大小有4(32位平…

解决Quixel Bridge导出到Blender3.1失败port 28888

文章目录 前言一、错误情景二、解决办法总结 前言 解决Quixel Bridge导出到Blender3.1报错无法经由端口28888导出. 一、错误情景 导出插件显示已安装完成: 但是点击右下角导出报错无法从端口28888执行该操作. 我尝试过把MSPlugin插件手动安装到Blender3.1但这并不奏效. 二、解…

聚观早报|Threads上线7小时注册破千万;兰博基将终结燃油车生产

今日要闻:Threads上线7小时注册破千万;兰博基尼宣布将终结燃油车生产;腾讯旗下企鹅FM9月6日正式停止运营;ChatGPT暂停接入必应搜索功能;首个国产GLP-1“减肥药”获批 Threads上线7小时注册破千万 7 月 6 日消息&#…

Windows 基本概念和术语

Windows 基本概念和术语 Windows APIWindows API 的风格Windows 运行时.NET Framework 服务、函数和例程进程使用任务管理器查看进程信息父进程 线程纤程用户模式调度线程 作业虚拟内存内核模式和用户模式虚拟机监控程序固件终端服务和多会话对象和句柄安全性注册表Unicode总结…

google软件测试之道

目录 前言: 一、Google软件测试介绍 1)质量不等于测试 2)角色、职责 3)组织结构 4)测试版本 5)测试类型: 二、软件测试开发工程师,SET 1)SET的工作 2&#xff…

JVM 三色标记算法

我们要进行垃圾回收,就需要弄明白哪些对象是需要回收的,哪些对象是不需要回收的。针对这个问题,其实业界已经有几种常见的解决方法了。 第一种是计数法 第一种是计数法,就是每个对象都有一个计数器,被引用了加一&…

4.2 x64dbg 针对PE文件的扫描

通过运用LyScript插件并配合pefile模块,即可实现对特定PE文件的扫描功能,例如载入PE程序到内存,验证PE启用的保护方式,计算PE节区内存特征,文件FOA与内存VA转换等功能的实现,首先简单介绍一下pefile模块。 …

uuid-golang中的使用---借鉴使用官网的办法--推荐

写在最前面的话,golang因为是国外开发的,官网,github都是网速卡或者不能使用的,这个时候可以使用国内的,搜索软件包或者下载 https://gitee.com/ 如果可以使用的话,建议从下面两个网站使用, …