我的 MySQL 服务器每秒运行大约 100 次写入和 500 次读取。CPU 使用率对我来说很奇怪。“us”(用户)时间显示 2-8%,而“sy”(内核/系统)时间通常显示 50+%。以下是一些 vmstat 输出:
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
5 1 3088828 153744 492 238764 152 0 224 578 3225 2343 7 61 5 3
6 0 3088792 153356 492 239016 60 0 96 1955 3001 2102 8 59 5 3
16 1 3088792 153140 492 239008 32 0 80 1115 4906 3850 6 54 18 14
2 1 3088792 153248 492 239124 8 0 44 1114 4529 3407 4 55 19 12
2 0 3088792 152768 624 239208 0 0 180 914 3984 3052 4 39 48 8
0 1 3088788 152736 624 239260 32 0 76 797 3683 2713 4 48 29 8
16 0 3088788 152644 624 239356 4 0 36 983 4042 2995 4 55 21 7
3 0 3088788 153044 624 239412 8 0 48 891 3981 2928 5 51 29 7
1 0 3088788 153016 624 239500 0 0 16 384 3581 2301 3 52 39 3
1 1 3088768 150852 628 239524 32 0 72 830 3804 2826 4 48 33 9
4 2 3088752 152604 632 239584 32 0 72 744 3423 2467 6 61 7 3
3 0 3088704 152024 632 239664 80 0 152 1272 3641 2729 5 51 22 9
12 1 3088704 150000 632 239760 0 0 44 1037 4049 2989 4 53 19 12
以下是一些 mpstat 输出:
05:10:32 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
05:10:33 PM all 5.65 0.43 55.65 10.87 0.00 1.30 16.52 0.00 9.57
05:10:34 PM all 2.11 0.00 36.14 5.96 0.00 0.35 2.46 0.00 52.98
05:10:35 PM all 1.98 0.00 28.05 7.26 0.00 0.33 0.00 0.00 62.38
05:10:36 PM all 2.01 0.67 27.09 2.68 0.00 0.67 4.35 0.00 62.54
05:10:37 PM all 2.04 0.68 32.65 6.12 0.00 0.34 2.04 0.00 56.12
05:10:38 PM all 4.13 0.00 50.41 10.33 0.00 0.83 15.29 0.00 19.01
05:10:39 PM all 2.71 0.00 32.54 4.75 0.00 0.34 0.34 0.00 59.32
05:10:40 PM all 1.03 1.03 31.62 4.12 0.00 0.34 4.12 0.00 57.73
05:10:41 PM all 3.02 0.34 27.85 8.05 0.00 0.67 0.34 0.00 59.73
05:10:42 PM all 1.69 1.69 27.70 8.45 0.00 0.34 4.39 0.00 55.74
05:10:43 PM all 3.19 0.00 38.65 3.90 0.00 0.35 2.13 0.00 51.77
05:10:44 PM all 2.50 0.36 37.14 7.50 0.00 0.36 2.50 0.00 49.64
05:10:45 PM all 4.17 0.38 42.42 7.20 0.00 0.38 4.92 0.00 40.53
05:10:46 PM all 4.42 1.20 49.40 9.24 0.00 0.40 5.22 0.00 30.12
05:10:47 PM all 3.32 0.00 44.65 18.82 0.00 0.37 0.37 0.00 32.47
05:10:48 PM all 2.72 0.78 48.64 5.45 0.00 0.78 5.06 0.00 36.58
05:10:49 PM all 3.69 0.00 48.36 4.92 0.00 0.82 13.11 0.00 29.10
05:10:50 PM all 4.52 0.00 59.28 10.86 0.00 0.90 19.91 0.00 4.52
05:10:51 PM all 4.02 0.89 58.04 3.57 0.00 0.45 22.32 0.00 10.71
05:10:52 PM all 4.02 0.89 56.25 5.80 0.00 1.34 19.20 0.00 12.50
05:10:53 PM all 5.38 1.15 39.62 8.08 0.00 0.77 7.69 0.00 37.31
这是正常的吗?我该如何解决“sy”CPU 使用率过高的问题?我正在 EC2“大型”实例上运行。
这是主-主对之一,因此如果重要的话,复制是双向运行的。
答案1
vmstat
很好,但mpstat
还增加了一些内容。您也可以发布其输出吗?
mpstat 上的更新:看起来 I/O 突发对系统有显著影响,但目前还不能说这是主要原因。您的存储是什么,它使用什么 FS,您是否考虑过减少 I/O 压力?
更新于 FS:同时,XFS 是用于数据库存储的出色 FS,其最新版本的元数据性能不佳。我注意到某些模式的 CPU 使用率为 100%,切换到除 XFS 之外的任何其他模式都可以解决问题。但现在它有silverbulletdelaylog
安装选项。您最好检查您的内核版本是否支持它。我也希望您noatime
至少已经设置了。
因此,划清界限 — — 我建议朝着减少 I/O 的方向发展。
答案2
可能是由于缓冲池内存回收。我们遇到过这种情况,即许多客户端运行同一组选择查询(慢速查询日志中有许多来自不同客户端的重复查询)。由于我们使用的是商业查询负载平衡器,因此我们能够将一些选择定向到从属服务器,从而解决了这个问题。