广告
返回顶部
首页 > 资讯 > 数据库 >如何理解CPU占用百分百问题
  • 327
分享到

如何理解CPU占用百分百问题

2024-04-02 19:04:59 327人浏览 独家记忆
摘要

这篇文章主要介绍“如何理解CPU占用百分百问题”,在日常操作中,相信很多人在如何理解CPU占用百分百问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解CPU占用百分百

这篇文章主要介绍“如何理解CPU占用百分百问题”,在日常操作中,相信很多人在如何理解CPU占用百分百问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解CPU占用百分百问题”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

怎么看懂CPU使用率

linux 的 top 命令为例,效果如下:

如何理解CPU占用百分百问题

Top 命令

在 %CPU 这一列就展示了 CPU 的使用情况,百分比指代的是总体上占用的时间百分比:

  •  %us:表示用户进程的 CPU 使用时间(没有通过 nice 调度)

  •  %sy:表示系统进程的 CPU 使用时间,主要是内核使用。

  •  %ni:表示用户进程中,通过 CPU 调度(nice)过的使用时间。

  •  %id:空闲的 CPU 时间

  •  %wa:CPU 运行时在等待 io 的时间

  •  %hi:CPU 处理硬中断花费的时间

  •  %si:CPU 处理软中断花费的时间

  •  %st:被虚拟机偷走的 CPU 时间

通常情况下,我们讨论的 CPU 使用率过高,指的是 %us 这个指标,监控里面的 CPU 使用率通常也是这个值(也有用其他的方法计算出来的,不过简单起见,不考虑其他的情况 )。其他几个指标过高也代表出 Mysql 的状态异常,简单起见,这里主要还是指 %us 过高的场景。

MySQL和线程

mysql 是单进程多线程的结构,意味着独占的 Mysql 服务器里面,只能用 top 命令看到一行数据。

如何理解CPU占用百分百问题

TOP 命令效果

这里能看到的是 MySQL 的进程 ID,如果要看到线程的情况,需要用top -H

如何理解CPU占用百分百问题

TOP 命令效果

在这里能看到的是 MySQL 各个线程的 ID,可以看到 MySQL 在启动之后,会创建非常多的内部线程来工作。

这些内部线程包括 MySQL 自己用来刷脏,读写数据等操作的系统线程,也包括处理用户 SQL 的线程,姑且叫做用户线程吧。用户线程有一个特殊的地方:程序端发送到 MySQL 端的 SQL,只会由一个用户线程来执行(one-thread-per-connection),所以 MySQL 在处理复杂查询的时候,会出现“一核有难,多核围观”的尴尬现象。

参考 %us 的定义,对于 Linux 系统来说,MySQL 进程和它启动的所有线程都不算内核进程,因此 MySQL 的系统线程和用户线程在繁忙的时候,都会体现在 CPU 使用率的 %us 指标上。

什么时候CPU会100%

MySQL 干什么的时候,CPU 会 100%?从前文的分析来看,MySQL 主要是两类线程占用 CPU:系统线程和用户线程。因此 MySQL 独占的服务器上,只需要留意一下这两类线程的情况,就能 Cover 住绝大部分的问题场景。

系统线程

在实际的环境中,系统线程遇到问题的情况会比较少,一般来说,多个系统线程很少会同时跑满,只要服务器的可用核心数大于等于 4 的话,一般也不会遇到 CPU 100%,当然有一些 bug 可能会有影响,比如这个:

MySQL BUG

虽然情况比较少,但是在面对问题的常规排查过程中,系统线程的问题也是需要关注的。

用户线程

提到用户线程繁忙,很多时候肯定会第一时间凭经验想到慢查询。确实 90% 以上的时候都是“慢查询”引起的,不过作为方法论,还是要根据分析再去得出结论的~

参考 us% 的定义,是指用户线程占用 CPU 的时间多少,这代表着用户线程占用了大量的时间。

一方面是在进行长时间的计算,例如:order by,group by,临时表,join 等。这一类问题可能是查询效率不高,导致单个 SQL 语句长时间占用 CPU 时间,也有可能是单纯的数据量比较多,导致计算量巨大。另一方面是单纯的 QPS 压力高,所以 CPU 的时间被用满了,比如 4 核的服务器用来支撑 20k 到 30k 的点查询,每个 SQL 占用的 CPU 时间并不多,但是因为整体的 QPS 很高,所以 CPU 的时间被占满了。

问题的定位

分析完之后,就要开始实战了,这里根据前文的分析给出一些经典的 CPU 100% 场景,并给出简要的定位方法作为参考。

PS:系统线程的 bug 的场景 skip,以后有机会再作为详细的案例来分析。

慢查询

在 CPU 100% 这个问题已经发生之后,真实的慢查询和因为 CPU 100% 导致被影响的普通查询会混在一起,难以直观的看 processlist 或者 slowlog 来发现元凶,这时候就需要一些比较明确的特征来进行甄别。

从前文的简单分析可以看出来,查询效率不高的慢查询通常有以下几种情况:

  •  全表扫描:Handler_read_rnd_next 这个值会大幅度突增,且这一类查询在 slowlog 中 row_examined 的值也会非常高。

  •  索引效率不高,索引选错了:Handler_read_next 这个值会大幅度的突增,不过要注意这种情况也有可能是业务量突增引起的,需要结合 QPS/TPS 一起看。这一类查询在 slowlog 中找起来会比较麻烦,row_examined 的值一般在故障前后会有比较明显的不同,或者是不合理的偏高。

    •  比如数据倾斜的场景,一个小范围的 range 查询在某个特定的范围内 row_examined 非常高,而其他的范围时 row_examined 比较低,那么就可能是这个索引效率不高。

  •  排序比较多:order by,group by 这一类查询通常不太好从 Handler 的指标直接判断,如果没有索引或者索引不好,导致排序操作没有消除的话,那么在 processlist 和 slowlog 通常能看到这一类查询语句出现的比较多。

当然,不想详细的分析 MySQL 指标或者是情况比较紧急的话,可以直接在 slowlog 里面用 rows_sent 和 row_examined 做个简单的除法,比如 row_examined/rows_sent > 1000 的都可以拿出来作为“嫌疑人”处理。这类问题一般在索引方面做好优化就能解决。

PS:1000 只是个经验值,具体要根据实际业务情况来定。

计算量大

这一类问题通常是因为数据量比较大,即使索引没什么问题,执行计划也 OK,也会导致 CPU 100%,而且结合 MySQL one-thread-per-connection 的特性,并不需要太多的并发就能把 CPU 使用率跑满。这一类查询其实是是比较好查的,因为执行时间一般会比较久,在 processlist 里面就会非常显眼,反而是 slowlog 里面可能找不到,因为没有执行完的语句是不会记录的。

这一类问题一般来说有三种比较常规的解决方案:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2.  读写分离,把这一类查询放到平时业务不怎么用的只读从库去。

  3.  在程序段拆分 SQL,把单个大查询拆分成多个小查询。

  4.  使用 HBasespark 等 OLAP 的方案来支持。

高 QPS

这一类问题单纯的就是硬件资源的瓶颈,不论是 row_examined/rows_sent 的比值,还是 SQL 的索引、执行计划,或者是 SQL 的计算量都不会有什么明显问题,只是 QPS 指标会比较高,而且 processlist 里面可能什么内容都看不到,例如:

如何理解CPU占用百分百问题

到此,关于“如何理解CPU占用百分百问题”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

您可能感兴趣的文档:

--结束END--

本文标题: 如何理解CPU占用百分百问题

本文链接: https://www.lsjlt.com/news/61981.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何理解CPU占用百分百问题
    这篇文章主要介绍“如何理解CPU占用百分百问题”,在日常操作中,相信很多人在如何理解CPU占用百分百问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解CPU占用百分百...
    99+
    2022-10-18
  • 如何解决日本服务器CPU百分之百问题
    日本服务器CPU百分之百的解决方法是:先打开任务管理器,点击进程,再点击CPU选项卡找到w3wp.exe进程,然后查看它是否占用了CPU所有的资源;若是的话,则打开IIS管理器,再打开网站对应的应用程序池里面的应用属性,然后点击性能选项卡,...
    99+
    2022-10-22
  • 如何解决CPU占用过高问题
    这篇文章主要介绍如何解决CPU占用过高问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!电脑CPU占用过高的原因:原因一、软件方面导致CPU占用过高软件方面主要在于系统问题,如系统过于臃肿,开启了非常多的应用程序或电...
    99+
    2023-06-28
  • 如何使用C语言处理算经中的百钱百鸡问题
    这篇文章主要介绍了如何使用C语言处理算经中的百钱百鸡问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 问题描述中国古代数学家张丘健在他的 《算经》 中提出了一个著名的 ...
    99+
    2023-06-29
  • 如何解决Https页面使用百度分享的问题
    小编给大家分享一下如何解决Https页面使用百度分享的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!解决方法解决方法来源于细语呢喃,注意网站可能被墙,需要代理...
    99+
    2023-06-08
  • 如何解决蹊跷的百度快照问题
    如何解决蹊跷的百度快照问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。站长运营网站过程中会遇到不同的快照情况,网站优化博客也是经常会被那些快照问题搞的头疼,和...
    99+
    2023-06-12
  • java应用cpu占用过高问题分析及解决方法
    使用jstack分析java程序cpu占用率过高的问题1,使用jps查找出java进程的pid,如37072,使用top -p 14292 -H观察该进程中所有线程的CPU占用。[root@cp01-game-dudai-0100.cp01...
    99+
    2023-05-31
    java cpu ava
  • 如何解决css高度设置百分比不生效的问题
    这篇文章主要讲解了“如何解决css高度设置百分比不生效的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何解决css高度设置百分比不生效的问题”吧! ...
    99+
    2022-10-19
  • Pinterest MySQL利用分片来解决百亿数据存储问题的示例分析
    这篇文章将为大家详细讲解有关Pinterest MySQL利用分片来解决百亿数据存储问题的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Pinteres 是你感兴...
    99+
    2022-10-18
  • 如何理解MySQL用户中的百分号%是否包含localhost
    这篇文章主要介绍“如何理解MySQL用户中的百分号%是否包含localhost”,在日常操作中,相信很多人在如何理解MySQL用户中的百分号%是否包含localhost问题上存在疑惑,小编查阅了各式资料,整...
    99+
    2022-10-18
  • 如何解决MySQL占用内存较大与CPU过高测试的问题
    小编给大家分享一下如何解决MySQL占用内存较大与CPU过高测试的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!更改后如下:...
    99+
    2022-10-18
  • 如何解码Redis最易被忽视的CPU和内存占用高问题
    这期内容当中小编将会给大家带来有关如何解码Redis最易被忽视的CPU和内存占用高问题,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。我们在使用Redis时,总会碰到一些r...
    99+
    2022-10-19
  • 如何解决RestTemplate请求url中包含百分号会被转义成25的问题
    小编给大家分享一下如何解决RestTemplate请求url中包含百分号会被转义成25的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!RestTemplate...
    99+
    2023-06-25
  • 如何解决服务器大量php-cgi.exe进程导致CPU占用100%的问题
    本篇内容主要讲解“如何解决服务器大量php-cgi.exe进程导致CPU占用100%的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决服务器大量php-cgi.exe进程导致CPU占用...
    99+
    2023-06-20
  • 如何解决电脑cpu使用率100%问题
    这篇文章主要介绍了如何解决电脑cpu使用率100%问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1,先在键盘上找到Ctrl、Alt和Del键,并同时按下。出现下图的界面后...
    99+
    2023-06-28
  • windows如何解决端口被占用的问题
    一、对端口的查看 1、打开黑窗口: 同时按下win+R(快捷键)后,在栏目中输入cmd(命令提示符,即命令窗口),点击确定。  2、查看端口被占用的情况: (1)、输入命令netstat-ano,会显示所用被占用的端口及其相关信息。 ...
    99+
    2023-09-13
    服务器 运维
  • xp系统分区无任何文件依然显示被占用了几百MB空间该怎样解决
    本篇文章给大家分享的是有关xp系统分区无任何文件依然显示被占用了几百MB空间该怎样解决,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。我的系统是Windows XP。当我把F盘里...
    99+
    2023-06-14
  • 为什么Win7下鼠标唤醒和视频加速CPU占用过高?如何解决问题
    为什么在Win7系统下用鼠标唤醒系统的时候CPU占用率那么高?为什么Windows Media Player开启视频加速模式下CPU会占用那么高?这都是为虾米? 一、把控好Windows 7系统的离开模式 熟悉Windo...
    99+
    2023-05-26
    CPU Win7 问题 视频 鼠标
  • 如何解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
    这篇文章主要介绍如何解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!node.js含有%百分号时,发送get请求...
    99+
    2022-10-19
  • 如何解决cpu使用率忽高忽低的问题
    小编给大家分享一下如何解决cpu使用率忽高忽低的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!首先要明白在哪里查看CPU使用率,鼠标右键点击桌面的底部工具栏,然后选择启动任务管理器。在弹出的Windows任务管理器选项...
    99+
    2023-06-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作