Linux高负载排查最佳实践
在Linux系统中,经常会因为负载过高导致各种性能问题。那么如何进行排查,其实是有迹可循,而且模式固定。
本次就来分享一下,CPU占用过高、磁盘IO占用过高的排查方法。
还是那句话,以最佳实践入手,真传一句话,假传万卷书。这就是工作中学习和读死书的区别与真相。
CPU占用率过高问题排查方法
-
使用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 2Linux 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 2Linux 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 mysqld03: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 10733Linux 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_INFOfrom performance_schema.threadswhere THREAD_OS_ID=10850;
磁盘IO占用率过高排查方法
-
使用 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 -P2. 查看指定用户的进程和线程 IO 读写情况iotop -u mysql3. 查看指定进程的线程 IO 读写情况iotop -p 10733
3. 根据线程定位具体SQL。
select PROCESSLIST_ID,THREAD_OS_ID,PROCESSLIST_USER,PROCESSLIST_HOST,PROCESSLIST_DB,PROCESSLIST_COMMAND,PROCESSLIST_INFOfrom performance_schema.threadswhere 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过掉防火墙࿰…...
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》作为一款多人在线射击游戏,其服务器和网络优化对于玩家体验至关重要。 首先,考虑到游…...
Mysql的行级锁到底是怎么加的?站
1. 架构背景与演进动力 1.1 从单体到碎片化:.NET 的开源征程 在.NET Framework 时代,构建系统主要围绕 Windows 操作系统紧密集成,采用传统的封闭式开发模式。然而,随着.NET Core 的推出,微软开启了彻底的开源与跨平台…...
告别轮询!用wx.request的onChunkReceived在微信小程序里实现打字机效果的AI聊天
微信小程序流式交互实战:打造丝滑的AI打字机聊天效果 第一次在小程序里看到ChatGPT那种逐字输出的效果时,我盯着屏幕研究了半天——这流畅度简直像有人在远程打字。后来才发现,原来微信团队早在基础库2.10.0就埋下了onChunkReceived这个彩蛋。…...
猫抓浏览器扩展终极指南:一站式网页资源嗅探解决方案
猫抓浏览器扩展终极指南:一站式网页资源嗅探解决方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为无法下载网页视频、音频而烦…...
Source Han Serif CN:免费开源宋体的7种字重完整使用教程
Source Han Serif CN:免费开源宋体的7种字重完整使用教程 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为商业项目寻找高质量中文字体而烦恼吗?Source Ha…...
3分钟快速上手!MaaYuan代号鸢如鸢自动化辅助工具终极指南
3分钟快速上手!MaaYuan代号鸢如鸢自动化辅助工具终极指南 【免费下载链接】MaaYuan 代号鸢 / 如鸢 一键长草小助手 项目地址: https://gitcode.com/gh_mirrors/ma/MaaYuan 还在为《代号鸢》和《如鸢》的日常任务重复操作而烦恼吗?MaaYuan作为一款…...
如何用imFile下载工具提升你的下载效率:完整使用指南
如何用imFile下载工具提升你的下载效率:完整使用指南 【免费下载链接】imfile-desktop A full-featured download manager. 项目地址: https://gitcode.com/gh_mirrors/im/imfile-desktop imFile是一款功能全面的下载管理器,专为解决现代网络下载…...
pinyin4j 实战:多音字精准匹配与优化策略
1. pinyin4j基础入门与多音字痛点 第一次接触pinyin4j是在2013年做电商搜索项目时,当时需要实现中文商品名的拼音搜索功能。这个轻量级的Java库确实帮了大忙,但很快就遇到了让人头疼的多音字问题。比如用户搜索"zhongqing"时,系统…...
中药小分子靶点筛选实战:8种主流技术优缺点对比与选型指南
中药小分子靶点筛选实战:8种主流技术优缺点对比与选型指南 在中药现代化研究的浪潮中,小分子靶点筛选技术正成为连接传统药效与现代药理的关键桥梁。不同于西药研发中常见的单靶点策略,中药小分子往往展现出"多靶点、多通路"的复杂…...
暗黑2存档编辑器终极指南:d2s-editor让你轻松掌控游戏体验
暗黑2存档编辑器终极指南:d2s-editor让你轻松掌控游戏体验 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否厌倦了反复刷装备的枯燥过程?想要体验不同职业build却受限于角色养成时间?d2s…...
魔兽争霸III兼容性终极指南:让经典游戏在现代系统上完美重生
魔兽争霸III兼容性终极指南:让经典游戏在现代系统上完美重生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸III在Windows …...
