我将我的服务器迁移到了一个新的RockyLinux9服务器上,从那以后,我的web服务器的MySQL服务器在使用几个小时后几乎占用了100%的CPU。
就目前而言,我发现减少CPU负载的唯一方法是重新启动MySQL服务器,这需要6秒,因此我的web服务器在重新启动时不正常。重新启动后,MySQL进程占用了大约3-10%的CPU.
在迁移之前,MySQL的版本是mysql Ver 8.0.30-0ubuntu0.20.04.2,现在我使用的是mysql Ver 8.0.28 for Linux on x86_64 (Source distribution)版本。
我使用的配置完全相同,我只做了一个副本/过去:
[mysqld]
sql_mode = "NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
key_buffer_size = 16M
myisam-recover-options = BACKUP
max_binlog_size = 100M我在上一个版本中找到的唯一选择是,我的新版本中没有:
optimizer_max_subgraph_pairs 100000但是这个选项在新服务器上是不可用的,所以我不能设置这个全局var。
这就像在我的新服务器上,MySQL没有自动清除一些缓冲区或缓存,几个小时后,CPU负载就爆炸了。
服务器配置与1G的RAM相同。
我检查了mem的使用量,并在不到20分钟内增加了100米,这是因为MySQL:
free -h
total used free shared buff/cache available
Mem: 954Mi 690Mi 65Mi 23Mi 199Mi 92Mi
Swap: 2.5Gi 2.1Gi 442Mi所以我重新启动了MySQL,内存的使用立即减少了。
systemctl restart mysqld.service
free -h
total used free shared buff/cache available
Mem: 954Mi 735Mi 70Mi 4.0Mi 148Mi 72Mi
Swap: 2.5Gi 1.4Gi 1.1Gi现在,MySQL仅占CPU使用率的10%以下。
我应该做什么来限制MySQL在内存的使用?
我可以使用以下2种设置来限制RAM的使用:
table_definition_cache = 400 #Default 2000
table_open_cache = 400 #Default 4000但是问题仍然存在,我真的觉得在这个过载MySQL的Rocky的安装上有一个背景过程。
也许是来自MySQL本身的后台进程。
我也认为这种过载是由于后台进程造成的,因为如果我重新启动我的MySQL服务器,当它占据我的90%的CPU时,它会下降3%到15%。所以这不是因为我的网络应用程序的访问。
因此,通过重新启动服务器,我停止了后台进程!
它可以是什么背景过程?
发布于 2022-09-04 19:09:58
innodb_buffer_pool_size的价值是什么?
在我看来,RAM的使用量上升了,交换的使用率下降了。
这两个设置都只有1GB的RAM,对吗?交换是致命的表现,你有很多交换。server>上还有其他应用程序吗?
上述设置是减少RAM的主要可调参数。我建议从不超过100米开始。
还检查SHOW STATUS LIKE 'Max_used_connections';,然后将max_connections设置为,例如,比“用”的值多2。
为了进行进一步的分析(包括寻找其他可能安全降低的东西),请按照下面的说明:http://mysql.rjweb.org/doc.php/mysql_analysis#tuning
https://dba.stackexchange.com/questions/316428
复制相似问题