![mysqld 导致 CPU 负载过高](https://linux22.com/image/512881/mysqld%20%E5%AF%BC%E8%87%B4%20CPU%20%E8%B4%9F%E8%BD%BD%E8%BF%87%E9%AB%98.png)
我的 mysqld 会在可变时间内(2 - 20 分钟之间)使用 99.9% 的 CPU,然后恢复正常 0.1% - 5%。检查进程列表:一切正常,1 到 20 个插入或更新持续 2 到 5 秒,大约 20 个进程处于睡眠模式(可能是因为脚本没有关闭 mysql 连接,但它们在大约 5 - 10 秒内关闭,我没有编写脚本 :P,但自从创建以来,服务器在过去 2 年中运行良好):
| 15375 | root | localhost | stoc | Query | 0 | NULL | show processlist |
| 79480 | pppoe | localhost | pppoe | Sleep | 4 | NULL | NULL |
| 79481 | pppoe | localhost | pppoe | Sleep | 4 | NULL | NULL |
| 79482 | pppoe | localhost | pppoe | Sleep | 4 | NULL | NULL |
| 79483 | pppoe | localhost | pppoe | Query | 0 | init | UPDATE acc SET InputOctets="0", OutputOctets="0", InputPackets="unknown", OutputPackets="User |
| 79484 | pppoe | localhost | pppoe | Sleep | 5 | NULL | NULL |
| 79485 | pppoe | localhost | pppoe | Sleep | 5 | NULL | NULL |
| 79486 | pppoe | localhost | pppoe | Sleep | 5 | NULL | NULL
检查了突袭,似乎没问题:
[root@db2]# cat /proc/mdstat
Personalities : [raid5] [raid4] [raid1]
md0 : active raid1 sdd1[3] sdc1[2] sdb1[0] sda1[1]
136448 blocks [4/4] [UUUU]
md1 : active raid5 sdd2[3] sdc2[2] sdb2[0] sda2[1]
12023808 blocks level 5, 256k chunk, algorithm 2 [4/4] [UUUU]
md3 : active raid5 sda4[1] sdd4[3] sdc4[2] sdb4[0]
203647488 blocks level 5, 256k chunk, algorithm 2 [4/4] [UUUU]
md2 : active raid5 sda3[1] sdd3[3] sdc3[2] sdb3[0]
24024576 blocks level 5, 256k chunk, algorithm 2 [4/4] [UUUU]
unused devices: <none>
[root@db2]#
top 可以看到我的 mysqld CPU 负载,但是其他方面好像都没有问题:
[root@db2]# top
top - 17:56:05 up 7 days, 3:55, 3 users, load average: 32.93, 24.72, 22.70
Tasks: 75 total, 4 running, 71 sleeping, 0 stopped, 0 zombie
Cpu(s): 63.4% us, 36.6% sy, 0.0% ni, 0.0% id, 0.0% wa, 0.0% hi, 0.0% si, 0.0% st
Mem: 1988824k total, 1304776k used, 684048k free, 99588k buffers
Swap: 12023800k total, 0k used, 12023800k free, 951028k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5754 mysql 19 0 236m 57m 5108 R 99.9 2.9 21:58.76 mysqld
1 root 16 0 7216 700 580 S 0.0 0.0 0:00.39 init
2 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
修复了所有 mysql 数据库,重新索引了 raid...我已经没有主意了……
有谁知道该服务器可能出现什么问题吗?
谢谢
答案1
您可以考虑使用 Monyog(1) 之类的软件来监控和分析您的数据库。它将分析并告知您可能需要查看的情况,并就如何解决问题提出建议。它还可以考虑 IO 等因素并检测死锁。
您也可以使用 Cacti (2) 来执行此操作,但您必须自制 (3) 更多模块来获取所需的信息。
mysqlreport (4) 非常适合快速诊断,但应该分析在负载下运行至少 8 小时的数据库。
许多此类工具还将通过引入诸如慢查询日志,有时还有通用日志等内容来提供帮助。
显然我无法发布所有资源的链接,所以这里有一个超链接粘贴箱获取所有资源的链接
答案2
获取慢查询列表,根据此列表验证您是否有适当的表索引。
如果缺少索引,速度可能会大大减慢。如果您需要 mysql 调优,则需要进行 mysql 分析,请在 Google 上搜索此内容。HTH
答案3
答案4
我认为您需要优化 MySQL 查询。您使用“索引”吗?请提供“show status”命令的输出,以查看您的服务器是否执行了大量表扫描。同时记录慢查询以帮助您识别问题。