在我的服务器(ubuntu 12.04)上,mysqld 开始显示一些奇怪的 CPU 峰值。我已将其中一些记录下来作为示例:
三连字符“---”后面的值是 top 报告的 CPU 使用率(后面是内存使用率)。例如,请注意 21:31:33、21:37:33(178%!)和 21:40:25 的 3 个大峰值。在这些时候,客户端无法访问服务器。
您知道是什么原因造成这些情况吗?
我做了几件事;
重启整个服务器: 之后也是一样
启用常规日志以实时查看查询:我估算了 CPU 高峰和不高峰时的查询量。数量是一样的。但是,当访客不多时,高峰之间的间隔似乎更长(对此不是 100% 确定,但快速查看后似乎如此)。
运行 mysqltuner:
-------- Performance Metrics -------------------------------------------------
[--] Up for: 1h 5m 28s (50K q [12.899 qps], 25K conn, TX: 22M, RX: 6M)
[--] Reads / Writes: 98% / 2%
[--] Total buffers: 208.0M global + 2.7M per thread (400 max threads)
[OK] Maximum possible memory usage: 1.3G (64% of installed RAM)
[OK] Slow queries: 0% (0/50K)
[OK] Highest usage of available connections: 9% (37/400)
[OK] Key buffer size / total MyISAM indexes: 16.0M/100.0K
[OK] Query cache efficiency: 94.0% (23K cached / 25K selects)
[OK] Query cache prunes per day: 0
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 1K sorts)
[OK] Temporary tables created on disk: 19% (54 on disk / 272 total)
[OK] Thread cache hit rate: 99% (37 created / 25K connections)
[OK] Table cache hit rate: 36% (77 open / 213 opened)
[OK] Open file limit used: 1% (50/4K)
[OK] Table locks acquired immediately: 100% (1K immediate / 1K locks)
[OK] InnoDB data size / buffer pool: 27.0M/128.0M
请注意,它在 mysql 重新启动后运行了一小段时间,但我之前运行过它并显示相同的内容。
检查 IO 问题:在 CPU 峰值期间以及峰值之间非常非常低。
检查完整进程列表:在 CPU 峰值期间和峰值之间,大部分都是空的。
我的 mysql 配置文件: http://pastebin.com/k5qpVVLR
其他服务器软件:该网站运行 Apache 和 PHP。在 mysql CPU 峰值期间,这些进程和其他进程没有任何不同。我检查了相关的 php 代码,似乎连接处理正常。来自我的 php.ini 的相关内容(也尝试过开启和关闭持久性):
pdo_mysql.cache_size = 2000
mysql.cache_size = 2000
mysql.max_links = -1
我读过有关优化表的内容,但总体思路似乎 innodb 不需要它,而且我的表也不是那么大(~30K 行)。
我很困惑,希望大家能给我一些指点。希望你们中有人也有过类似的经历。
多谢。
答案1
是什么让你觉得这些峰值很奇怪?这可能只是 mysql 像平常一样处理查询。你需要做的是分析哪些查询花费的时间最长,并将其与 CPU 增加的时间相关联。你应该首先打开慢查询日志记录并查看花费时间最长的查询。一旦追踪到这些查询,你就可以开始思考如何让它们更有效地运行。