MySQL 使用大量内存

MySQL 使用大量内存

使用 my-small.cnf 在 Ubuntu 9.10 服务器机上设置 MySQL 服务器,但它仍然使用了超过 100% 的内存(突发)。

热门报道: 替代文本 http://anyhub.net/file/top.png

答案1

109MB虚拟仿真测试系统不算多。(相比之下,我现在的数据库服务器使用大约 900mb VIRT + 500mb RSS)

VIRT 将包括映射文件等内容。您的应用未使用 94mb 的交换空间(109mb(virt)- 15mb(rss)),该 VIRT 的很大一部分是映射数据库表、磁盘二进制文件、库和其他磁盘数据文件。

如果您担心该值,可以通过稍微调低 my.cnf 中的参数来调整它。请记住,每个空闲连接都会使用一点内存,因此调整 MaxConnections 以在主机上使用最佳内存量将是一门暗黑艺术。

从您的 TOP 屏幕我注意到您没有任何交换。请记住,Linux 将智能地管理交换,并且它将交换出不经常使用的页面以腾出空间用于磁盘缓存,这将极大地提高系统性能。通常认为没有交换是不好的:如果您禁用交换是因为您的系统之前交换过度,那么您的系统的内存将严重不足,而无交换只会损害性能或更快地击中 OOM 杀手。

答案2

可能你一开始就没有足够的内存。

我不是 MySQL 专家,但我在 SQL Server 上做了很多数据库工作。数据库可能占用大量内存,也可能占用大量 IO。这两种情况对于低端虚拟机来说都不是好事。进程占用 100mb 内存,留给数据库缓存的内存并不多 — 如果您删除进程本身,再加上一些用于计划等的缓存。

有可能你只需要多加一些内存 - 根据数据库的使用情况,我们在这里可能会讨论 GB。所有这些都是为了避免 IO。不,这不是 MySQL / SQL Server 特有的 - 数据库尝试缓存以避免 IO,因为 IO 很慢。数据库依赖于 RAM 和 IO。我知道数据库使用超过 16GB 的内存只是为了避免缓存 ;)

并且 - 抱歉 - 100mb 内存的数据库进程并没有使用大量内存(大量)......它可能使用了极少的内存。

主要问题是:你有多少数据?你用这些数据做什么?

相关内容