Code前端首页关于Code前端联系我们

MySQL服务器sys CPU高问题分析器

terry 2年前 (2023-09-26) 阅读数 86 #数据库
MySQL 服务器 sys CPU usage高问题分析最近遇到一个与MySQL服务器操作系统内核相关的问题。作为一名DBA,不仅需要具备数据库知识,还需要了解操作环境中解决问题的一些方法和途径。 高端物理服务器,MySQL每天运行的并发数也是20。但是发现sys对CPU的使用率比较高。随着并发量的增加,sys的值不断上升,最终导致qps和tps下降。严重时可能会出现贫困。

分析思路

你需要知道CPU系统是什么? MySQL在什么情况下会影响CPU?按照这个思路进行调查。
  1. %sy (sys)
    显示运行在内核态的CPU时间百分比(不包括中断),这意味着系统进程正在使用CPU时间。一般来说,CPU内核态越低越好,否则系统会出现一些瓶颈。例如:频繁的I/O操作、大网络数据包传输、核心输出等。
  2. mysql对CPU的影响:
    并发度很高,连接数满时很多线程要等待,mysql参数控制并发,大事务等。 util
    MySQL 服务器 sys CPU usage高问题分析3。 MySQL 运行情况 一次并发运行数量:3 个线程并行运行
    MySQL 服务器 sys CPU usage高问题分析
    5. MySQL 并发限制:无限制 MySQL 服务器 sys CPU usage高问题分析 6. 错误日志、系统日志:无异常信息 从运行中看到上面所有的mysql,相当有趣。因为除了反馈系统偏高之外,其他指标都在正常范围内。 ? xDescription:
    将 rax 寄存器数据传输到 rdi 寄存器,但 rax 寄存器数据本身不会损坏
  3. reset_isolation_suitable:
    内存碎片管理
  4. 他展示了内核内存管理。 。其实很可能是内存碎片管理导致sys偏高。

    原理分析

    1.知识点
    CPU是指中央处理器。中央处理器的主要功能是处理指令、执行运算、控制时序和处理数据。CPU 和内存之间的架构分为两种:
    MySQL 服务器 sys CPU usage高问题分析 2. 内存架构
    物理内存由节点、区域和页面三级结构组成。

    MySQL 服务器 sys CPU usage高问题分析

  • ZONE_NORMAL:通常使用的物理内存区域。所应用的大部分内存都使用该区域。
  • ZONE_HIGHMEM:只会出现在32位系统上。此时,因为在32位系统中,物理内存可以直接映射到内核中的896M内存
  • ZONE_MOVABLE:可以移动或回收的区域,托管的物理内存来自于ZONE_NORMAL或ZONE_HIGHMEM,主要是为了防止内存碎片和支持热插拔功能,内核根据配置划分了ZONE_NORMAL或ZONE_HIGHMEM一块物理内存ZONE_MOVABLE。
ZONE_MOVABLE区域有两个重要的作用:
  • 可以有效防止内存碎片。
  • 支持内存热插拔,特别是在虚拟化场景下。当不需要大量物理内存时,可以释放进程以供系统中的其他程序使用。当需要申请新的物理内存时,可以重新进入进程。
系统核心是一个有趣而神秘的领域。

位置分析

现在我们了解了内存的一些基本理论,那么如何检查内存碎片情况呢?
Linux内核提供了pagetypeinfo、slabinfo、buddyinfo等方面来提供分析
查看buddyinfo来分析系统内存碎片shell> cat /proc/buddyinfo |
awk -v ps="`getconf PAGESIZE`" -v date ="`date`" -v host="`hostname`" \
'BEGIN{printf("\n碎片报告\n低阶 1-4,高阶顺序为 5-9,普通顺序为 10-11\ n%s\t%s\n\n",host,date)} {\
L= ps * ( ($5 * 1) + ($6 * 2) + ($7 * 4) + ($8 * 8 )); \
H= ps * ( ($9 * 16) + ($10 * 32) + ($11 * 64) + ($12 * 128) + ($13 * 256) ); \
N= ps * ( ($14 * 512) + ($15 * 1024) ); \
T=L+H+N; \
printf("%s\t总计: %8dM\t底部: %02.2f%%\ t最高: %02.2f%%\t正常: %02.2f%%\n",\
$1" " $2 ""$3" "$4,T/1024/1024,(L/T)*100,(H/T)*100,(N/T)*100);}'MySQL 服务器 sys CPU usage高问题分析
  • NORMAL:通常情况下的物理内存区域使用过的,大部分申请的内存都使用这个区域
  • LOW:水位低,代表内存已经开始紧张,需要启动kswapped线性回收页内核来回收内存
  • HIGH:水位高,表示内存还够用。
cat /proc/zoneinfo节点 0,区域 DMA
每个节点统计数据
nr_inactive_anon 448
nr_1 nr_1 nr_1 active_文件 121291
nr_file_aktiv 95855
nr_unvictable 0
nr_slab_reclaimable 13073
。 。 。
免费页面 2166
分钟 94
低 117
高 140
跨度 4095

大 3 840
保护:(0, 1781, 1781, 1781)
nr_free_pages 2166
。 。 。
  • page_low:当空闲页面数量达到page_low指定的数量时,kswapd线程将被唤醒并开始释放和回收页面。该值默认为page_min的2倍。
  • page_min:当空闲页面数达到 page_min 校准的数量时,页面分配动作将与 kswapd 线程一起运行
  • page_high:当空闲页面数量达到 thread_page 校准的数量时,kswapd 将重新启动-sleep,通常这个值是page_min的3倍。

解决方案

内核更改

sysctl 用于在内核运行时动态更改内核参数。可用的内核参数位于 /proc/sys 目录中。它包含 TCP/IP 堆栈和虚拟内存系统的多个高级选项,以实际管理和提高系统性能。 sysctl -a | grep "vm\."
[root@schouse kevindba]# sysctl -a | grep "vm\."
. 。 。
vm.drop_caches = 0
vm.extfrag_threshold = 500
vm.min_free_kbyte = 45056

vm.watermark_1 。 。1。内存压缩extfrag_threshold:当申请系统的大近内存时,如果没有符合条件的匹配页,就会触发内存压缩。该参数用于控制内存压缩的可能性。它是一个从0到1000的整数。如果没有足够的内存,Linux将确定当前系统的内存碎片分数。如果超过extfrag_threshold值,Kswapd将触发内存压缩。
  • 如果这个值接近1000,说明系统在处理内存碎片时倾向于替换旧页面以满足应用程序的需求;
  • 如果接近0,说明系统在处理内存碎片时倾向于进行内存压缩。
    更改 exfrag_threshold 内核参数以避免内存碎片。
sysctl -w vm.extfrag_threshold = 10002。设置最小水位有时,建议将最小水位设置为总内存的1%~3%。我们建议将其设置为总内存的 2%。当内存资源紧张时,会提前进入异步循环。 sysctl -w vm.min_free_kbytes = memtotal_kbytes * 2% 其中,变量memtotal_kbytes * 2%表示当前示例中总内存的2%对应的内存大小。 3。调整最小水印和低水印的差值 可以通过内核watermark_scale_factor调整最小水印和低水印的差值,以应对突发的业务对内存的请求。 watermark_scale_factor默认值为总内存的0.1%,最小值(即watermark min和watermark less之间的最小差值)为0.5 * watermark min。 sysctl -w vm.watermark_scale_factor = value 其中,变量值为手动设置的最低水位与低水位之间的差值。

定期清理

定期重启服务和服务器或执行定期清理操作1.定期进行内存整合可以在业务空闲期间主动触发异步内存整合。? (删除缓存)操作,然后内存将被重新分配。刷新缓存是防止内存碎片的有效措施,但刷新缓存时会出现短暂的系统性能中断(不推荐此方案,只能作为紧急情况使用)。 echo 3 > /proc/sys/vm/drop_caches

升级

此外,您还可以进行操作系统重装、内核升级、软件升级等操作。因为这些方面都在不断更新。但是,不能保证该问题不会再次发生。但这确实是一个相对罕见的景象。

总结

在Banding分析问题的所有思路和过程中,DBA不仅需要数据库方面的知识,还需要了解一些关于运行环境的浅层内核知识。
对于内存碎片问题,请根据实际情况选择合理的解决方案。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门