mysqld 导致 CPU 负载过高

mysqld 导致 CPU 负载过高

我的 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”命令的输出,以查看您的服务器是否执行了大量表扫描。同时记录慢查询以帮助您识别问题。

相关内容