为什么不能使用buff/cache?

为什么不能使用buff/cache?

看来 mysqld 分配了太多的内存作为 buff/cache:

free -m
              total        used        free      shared  buff/cache available
Mem:            990         448          96          36         445         326
Swap:           511         511           0

现在我无法启动 httpd 服务,因为它“分叉失败:无法分配内存”。

我想知道为什么会发生这种情况?为什么 445M buff/cache 不能被回收并用于 httpd?

答案1

“buff/cache”列报告缓冲区和缓存使用的内存总和。

缓冲区无法被回收,因为内核需要它们来运行。

缓存可以回收,如“可用”列所示。但是,如果相关缓存页是脏的,则需要将回收内存的当前内容写入交换。但是您的交换已满,如“交换”行的“可用”列中的 0 所示。

总之,内存分配失败是因为您的交换已满,或者换句话说,因为您的虚拟内存已耗尽。

答案2

1GB 对于运行 MySQL 来说是一个非常小的机器。除了已经讨论过的项目之外,请查看my.cnf(或 MySQL 的配置文件所在的任何位置)。查找或设置(在[mysqld]部分中)以下内容:

max_connections = 10
innod_buffer_pool_size = 150M
key_buffer_size = 10M
table_open_cache = 50

降低你的价值观到这些;它可能有助于事情开始。

您使用的是哪个版本的 MySQL(或 MariaDB)?您在同一台机器上还安装了哪些其他应用程序?

相关内容