有时 mysqld 使用 top 时 CPU 占用率会达到 95%。这会导致我的整个服务器停止运行。有没有办法将 CPU 使用率限制在最高 25%?
答案1
首先,您需要启用慢查询日志记录,以便检测问题的根本原因。
接下来,您需要对您的应用程序进行分析,以便了解资源花在了哪里。
最后,对你的 mysql 实例进行性能调整,以便最适合你的硬件和应用程序要求。
根据我的经验,导致 mysql 崩溃的原因是磁盘访问。“限制”mysql 的唯一方法是正确分片数据,以便将磁盘访问保持在最低限度。如果您有一个包含 1 亿行的表,即使有索引,您也会遇到连接问题。因此,如果可能的话,请将这些数据分片。您还可以使用复制来在多个主机之间“平衡”读取负载。
有许多“临时”的解决方案可以解决性能问题。但如果没有明确根本原因,这些方法都不太可能奏效。
答案2
兰迪的答案非常好,但我想补充一个更通用的观点。
未使用的 CPU 是浪费。如果一个服务占用了所有 CPU,正确配置的服务器不会陷入停顿,因为您的操作系统就是为处理这种情况而构建的。因此,您可以做的是降低 mysqld 进程的优先级(renice +19),以确保您的其他进程具有更高的优先级并获得所需的 CPU 时间。
当然,这并不能解决根本问题,也不能处理资源竞争(高 IO 负载或交换会使服务器无法工作)。但如果是纯粹的 CPU 问题,更改优先级可能会有所帮助。