在将我们的内存 + 物理核心丰富的数据库服务器切换到大页面后,我们注意到了一个小问题。
内存使用情况看起来几乎像是存在某种内存泄漏。
但是运行 FLUSH TABLES 会清除大约 10GB 的已用内存(当然取决于我们何时运行它,就像我们等待多长时间一样)。
附件是一个 munin 图表来显示内存使用情况。
是什么原因导致我们每隔两天左右强制刷新一次表?
有关所附图表的说明:
a) 图表开头的良好平坦内存使用情况是当我们运行(Oracle)MySQL 5.6 时不使用大页面时的情况。
b) 10-11 之间的内存使用量增加是因为我们运行的是带大页面的 Percona 5.6。11 结束时,我们从 Percona 切换回 Oracle MySQL 5.6(但决定保留大页面)。
c) 当我们回到启用了大页面的 (Oracle) MySQL 5.6 时,内存使用量在 12-14.5 之间不断增加。我们认为这种内存使用量的增加是由 Percona 中的某种内存泄漏引起的。这就是我们切换回 (Oracle) MySQL 5.6 的原因。保留大页面。
d)当我们第一次尝试运行 FLUSH TABLES 时,内存使用量下降到 14.5 左右(此时仍在运行 Oracle MySQL 5.6,无需重启,只是执行简单的 FLUSH TABLES)。
经过这次来回切换,我们了解到原因不是 percona 5.6,而是大页面。
总结一下:
什么迫使我们每两天左右运行一次 FLUSH TABLES 以防止在启用大页面的情况下出现内存不足?
我知道我们可以在非高峰时段安排 FLUSH TABLES,但希望妥善解决这个问题。
谢谢!
答案1
我不认为这是内存泄漏。可能只是因为没有大页面,内存使用量就达到了上限,这就是内存使用量看起来持平的原因。切换到大页面后,MySQL 可能只是能够更好地利用可用内存。系统没有达到交换。我想说的是密切监视并停止刷新表。