我的 CentOS 6.5 上通过 crontab 执行了几个 php 脚本,每个 php 脚本至少包含一个数据库请求。根据 php 对象的大小和类型,mysqld 服务在某些特定情况下会分配过多的物理内存。
有时,1.7GB 内存中只有 15MB 可用,交换内存也可能被分配到 95% 的使用率。要释放服务器内存,唯一的替代解决方案是重新启动 mysqld 服务器,但几天后内存几乎又满了。
为了忽略 mysqld 重启,我尝试使用 刷新查询缓存RESET QUERY CACHE;
,FLUSH QUERY CACHE;
但内存状态没有任何变化。我也尝试执行,sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
但内存状态还是一样。
您是否知道如何在每次执行脚本后释放物理和虚拟内存而无需重新启动 mysql 服务器?
答案1
如果是 MySQL 占用了所有内存,那么您必须调低其值或增加服务器 RAM。如果您告诉 MySQL 它可以拥有 16 GB 的 RAM,但只有 8 GB 可用,那么事情就会发生。
您不会在普通的酒店房间里举办 20 人聚会,结果却发现房间太小,第二天晚上再来,希望那里能容纳 20 人。您要么预订更大的房间,要么邀请更少的人。