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

Linux高负载排查最佳实践

在Linux系统中,经常会因为负载过高导致各种性能问题。那么如何进行排查,其实是有迹可循,而且模式固定。

本次就来分享一下,CPU占用过高、磁盘IO占用过高的排查方法。

还是那句话,以最佳实践入手,真传一句话,假传万卷书。这就是工作中学习和读死书的区别与真相。

CPU占用率过高问题排查方法

  1. 使用mpstat查看cpu使用情况。

# mpstat 是一款 CPU 性能指标实时展示工具# 能展示每个 CPU 核的资源视情况,同时还能将资源使用情况进行汇总展示# 如果CPU0 的 %idle 已经为 0 ,说明此核已经非常繁忙
# 打印所有cpu核的情况(ALL),每隔1s打印一次,共打印5次mpstat -P ALL 1 5

图片

mpstat命令执行结果

从上面可以看到,服务器有 2 个 CPU(分别为0、1),每个 CPU 核的资源使用情况,也能很清晰的展示。

当服务器有特别多的 CPU 核,有时候看 CPU 汇总信息,发现 CPU 的 idle 很高,但是上面跑的应用程序却很慢,这个时候就需要看看每个核的资源试用情况了。

重点关注指标:

* %iowait:代表在监控的时间间隔内,等待硬盘 I/O 的时间,如果此值比较高,说明 IO 非常繁忙* %idle:代表在监控的时间间隔内,CPU 闲置时间所占用的时间百分比,此值越大,代表 CPU 越空闲

2. 使用pidstat查看消耗cpu资源的进程。

# 参数-u表明监控cpu使用情况# 参数2表示每隔2s输出一次,会循环输出pidstat -u 2
Linux 3.10.0-957.el7.x86_64 (mysql)     12/30/2020      _x86_64_        (1 CPU)
04:57:41 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command04:57:43 PM  2001     10733    0.00   91.44    0.00   91.44     0  mysqld04:57:43 PM  2001     12635    0.00    0.53    0.00    0.53     0  pidstat

从上面的结果可以看到,导致 CPU0 资源被耗尽的元凶是 mysqld 进程,占用91.44%,需要定位具体线程。

pidstat 是一个非常强大的性能指标监控工具,建议掌握,此工具可以用来监控全部或指定进程的 CPU、mem、线程,IO 的资源的使用情况。

# 参数-d表示监控进程对磁盘的使用情况pidstat -d 2
Linux 3.10.0-957.el7.x86_64 (mysql) 12/30/2020 _x86_64_ (1 CPU)
03:57:47 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s Command03:57:49 PM 2001 10733 139.13 0.00 0.00 mysqld
03:57:49 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s Command03:57:51 PM 2001 10733 34034.78 0.00 0.00 mysqld

可以查看指定进程的线程 CPU 资源使用情况。

# 参数 -t,可以获取指定进程的线程的 CPU 使用情况pidstat -t 2 -p 10733

3. 使用 pidstat 查看消耗 CPU 资源的线程

pidstat -t 2 -p 10733
Linux 3.10.0-957.el7.x86_64 (mysql)     12/30/2020      _x86_64_        (1 CPU)
05:00:53 PM   UID      TGID       TID    %usr %system  %guest    %CPU   CPU  Command05:00:55 PM  2001     10733         -    0.00   91.30    0.00   91.30     0  mysqld05:00:55 PM  2001         -     10733    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10734    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10735    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10736    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10737    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10738    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10739    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10740    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10741    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10742    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10743    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10744    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10745    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10747    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10748    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10749    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10750    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10751    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10752    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10753    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10754    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10755    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10756    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10757    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10758    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10762    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10763    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10764    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10766    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10796    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10850   15.22   75.54    0.00   90.76     0  |__mysqld

可以很清楚看到是 10850 线程消耗了 CPU 资源,剩下的就根据操作系统的里线程 ID,去 MySQL 数据库里排查,此线程正在执行的操作。

4. MySQL中查询线程对应的具体SQL

-- 在 MySQL 5.7 版本,官方增加了一个视图,专门记录操作系统线程和数据库进程之间关联视图。-- 前面定位的最消耗 IO 和 CPU 的线程 ID 为 10850:select PROCESSLIST_ID,THREAD_OS_ID,PROCESSLIST_USER,PROCESSLIST_HOST,PROCESSLIST_DB,PROCESSLIST_COMMAND,PROCESSLIST_INFO from performance_schema.threads where THREAD_OS_ID=10850;

磁盘IO占用率过高排查方法

  1. 使用 iostat 查看磁盘 IO 的读写情况。

# 每隔1s输出一次iostat -mxt 1# 每隔1s输出一次,共输出2次iostat -mxt 1 2

图片

iostat命令输出

如果看到 %util 比较高,说明磁盘设备繁忙,需要定位到底是那个操作系统进程导致的大量读操作。

iostat 是一款用于监控系统设备的 IO 负载情况的工具,在运维工作中会被高频使用的工具之一。

# 常用参数介绍* -m:输出结果以兆为单位显示* -t:输出结果中显示时间戳* -x:显示和 IO 相关的扩展数据,包括每个设备的读写、合并读、合并写、读写等待情况# 输出指标介绍* rrqm/s:每秒合并读的条目* wrqm/s:每秒合并写的条目* r/s:每秒 read I/O 设备次数* w/s:每秒 write I/O 设备次数* rMB/s: 每秒读取 M 字节数* wMB/s:每秒写 M 字节数* avgrq-sz:每次设备 I/O 操作平均数据大小* avgqu-sz:I/O 队列平均长度* await:每次设备 I/O 操作的平均等待时间,单位毫秒* r_await:每次读 I/O 操作的平均等待时间,单位毫秒* w_await:每次写 I/O 操作的平均等待时间,单位毫秒* svctm:每次设备 I/O 操作的平均服务时间,单位毫秒* %util:每秒中有百分之多少的时间用于 I/O 操作,此值越高,代表着磁盘越繁忙

2. 使用 iotop 定位最消耗 IO 资源的元凶

iotop -p 10733

图片

可以看到10850 线程大量读操作,导致 IO 资源被消耗殆尽。

iotop 是一款用于监视磁盘设备 I/O 使用状况的工具,可监测到具体的线程使用的磁盘 IO 的信息,功能也是非常强大,可惜需要 root 权限,普通用户没有执行权限,所以一般会用 pidstat 工具来替代。

参数介绍:
-P:只显示进程 IO 读写情况 -p:监控指定进程的 IO 读写情况 -u:指定用户进程的 IO 读写情况
1. 查看指定用户的的进程iotop -u mysql -P
2. 查看指定用户的进程和线程 IO 读写情况iotop -u mysql
3. 查看指定进程的线程 IO 读写情况iotop -p 10733

3. 根据线程定位具体SQL。

select PROCESSLIST_ID,THREAD_OS_ID,PROCESSLIST_USER,PROCESSLIST_HOST,PROCESSLIST_DB,PROCESSLIST_COMMAND,PROCESSLIST_INFO from performance_schema.threads where THREAD_OS_ID=10850;

相关文章:

Linux高负载排查最佳实践

在Linux系统中,经常会因为负载过高导致各种性能问题。那么如何进行排查,其实是有迹可循,而且模式固定。 本次就来分享一下,CPU占用过高、磁盘IO占用过高的排查方法。 还是那句话,以最佳实践入手,真传一句话…...

【python开发】网络编程(上)

这里写目录标题 一、必备基础(一)网络架构1、交换机2、路由器3、三层交换机4、小型企业基础网络架构5、家庭网络架构6、互联网 (二)网络核心词汇1、子网掩码和IP2、DHCP3、内网和公网IP4、云服务器5、端口6、域名 一、必备基础 &…...

php源码 单色bmp图片取模工具 按任意方式取模 生成字节数组 自由编辑点阵

http://2.wjsou.com/BMP/index.html 想试试chatGPT4生成,还是要手工改 php 写一个网页界面上可以选择一张bmp图片,界面上就显示这张bmp图片, 点生成取模按钮,在图片下方会显示这张bmp图片的取模数据。 取模规则是按界面设置的&a…...

设计模式-命令模式(Command Pattern)

承接Qt/C软件开发项目,高质量交付,灵活沟通,长期维护支持。需求所寻,技术正适,共创完美,欢迎私信联系! 一、命令模式的说明 命令模式(Command Pattern)是一种行为设计模式…...

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:位置设置)

设置组件的对齐方式、布局方向和显示位置。 说明: 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 align align(value: Alignment) 设置容器元素绘制区域内的子元素的对齐方式。 卡片能力: 从API…...

ShardingJdbc实战-分库分表

文章目录 基本配置分库分表的分片策略一、inline 行表达时分片策略algorithm-expression行表达式完整案例和配置如下 二、根据实时间日期 - 按照标准规则分库分表标准分片 - Standard完整案例和配置如下 基本配置 逻辑表 逻辑表是指:水平拆分的数据库或者数据表的相…...

51单片机-(定时/计数器)

51单片机-(定时/计数器) 了解CPU时序、特殊功能寄存器和定时/计数器工作原理,以定时器0实现每次间隔一秒亮灯一秒的实验为例理解定时/计数器的编程实现。 1.CPU时序 1.1.四个周期 振荡周期:为单片机提供定时信号的振荡源的周期…...

midjourney提示词语法

更高级的提示可以包括一个或多个图像URL、多个文本短语和一个或更多个参数 Image Prompts 可以将图像URL添加到提示中,以影响最终结果的样式和内容。图像URL总是位于提示的前面。 https://docs.midjourney.com/image-prompts Text Prompt 要生成的图像的文本描述。…...

【鸿蒙 HarmonyOS 4.0】路由router

一、介绍 页面路由指在应用程序中实现不同页面之间的跳转和数据传递。HarmonyOS提供了Router模块,通过不同的url地址,可以方便地进行页面路由,轻松地访问不同的页面。 二、页面跳转 2.1、两种跳转模式: router.pushUrl()&…...

AT24C1024的模拟IIC驱动

AT24C1024是基于IIC的EEPROM,容量为1024/8128k bytes。它的引脚如下: 其中A1,A2为硬件地址引脚 WP为写保护引脚,一般我们需要读写,需要接低电平GND,接高的话则仅允许读 SDA和SCL则为IIC通信引脚 芯片通信采用IIC&…...

Stable Diffusion生成式扩散模型代码实现原理

Stable Diffusion可以使用PyTorch或TensorFlow等深度学习框架来实现。这些框架提供了一系列的工具和函数,使得开发者可以更方便地构建、训练和部署深度学习模型。因此可以使用PyTorch或TensorFlow来实现Stable Diffusion模型。 安装PyTorch:确保您已经安…...

解决Keepalived “脑裂”(双VIP)问题

1. 检查广播情况 yum install tcpdump -y tcpdump -i ens33 vrrp -n master 192.168.80.130 与 backup: 192.168.80.131都在广播,正常情况下backup应该是不在广播的,所以可以判断存在防火墙屏蔽vrrp问题,需要设置VRRP过掉防火墙&#xff0…...

cAdvisor+Prometheus+Grafana 搞定Docker容器监控平台

cAdvisorPrometheusGrafana cAdvisorPrometheusGrafana 搞定Docker容器监控平台1、先给虚拟机上传cadvisor2、What is Prometheus?2.1、架构图 3、利用docker安装普罗米修斯4、安装grafana cAdvisorPrometheusGrafana 搞定Docker容器监控平台 1、先给虚拟机上传cadvisor cAd…...

java基础知识面试题

下面是关于java基础知识的一些常见面试题 equals 与区别 在Java中,""是一个比较操作符,用于比较两个变量的值是否相等。而"equals()"是Object类中定义的方法,用于比较两个对象是否相等。 具体区别如下: &…...

科技云报道:黑马Groq单挑英伟达,AI芯片要变天?

科技云报道原创。 近一周来,大模型领域重磅产品接连推出:OpenAI发布“文字生视频”大模型Sora;Meta发布视频预测大模型 V-JEPA;谷歌发布大模型 Gemini 1.5 Pro,更毫无预兆地发布了开源模型Gemma… 难怪网友们感叹&am…...

解决i18n国际化可读性问题,傻瓜式webpack中文支持国际化插件开发

先来看最后的效果 问题 用过国际化i18n的朋友都知道,天下苦国际化久矣,尤其是中文为母语的开发者,在面对代码中一堆的$t(abc.def)这种一点也不直观毫无可读性的代码,根本不知道自己写了啥 (如上图,你看得出…...

【Django】执行查询—F()表达式

F() F()可以实现将模型字段值与同一模型中的另一字段做比较。举个例子看一下: class Entry(models.Model):...number_of_comments models.IntegerField(default0)number_of_pingbacks models.IntegerField(default0)...找到所有 number_of_pingbacks 大于 numbe…...

202112CSPT4磁盘文件操作

题意:有n个id号,m段空间,k个操作: 0 0 0:从L开始到R或遇到第一个其他非空id号为止,写入 i d id id号以及值 v a l val val;如果成功写入则输出写入成功的最右位置,否则输出-1 1 1 1:若 [ L , …...

5GC SBA架构

协议标准:Directory Listing /ftp/Specs/archive/23_series/23.501/ (3gpp.org) NF描述说明NSSFNetwork Slice Selection Function网络切片选择,根据UE的切片选择辅助信息、签约信息等确定UE允许接入的网络切片实例。NEF Network Exposure Function网络开…...

《求生之路2》服务器如何选择合适的内存和CPU核心数,以避免丢包和延迟高?

根据求生之路2服务器的实际案例分析选择合适的内存和CPU核心数以避免丢包和延迟高的问题,首先需要考虑游戏的类型和对服务器配置的具体要求。《求生之路2》作为一款多人在线射击游戏,其服务器和网络优化对于玩家体验至关重要。 首先,考虑到游…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

【HTTP三个基础问题】

面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

大数据学习(132)-HIve数据分析

​​​​🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言&#x1f4…...

9-Oracle 23 ai Vector Search 特性 知识准备

很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...

SpringAI实战:ChatModel智能对话全解

一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM&#xff0…...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...