我的系统没有交换区,内存为 16 GB。
据我所知,Linux 动态分配缓冲区内存分配,具体取决于系统中有多少可用 RAM。
此时此刻,这是以下输出free -h
:
total used free shared buff/cache available
Mem: 14G 2,2G 10G 336M 2,3G 10G
Swap: 0B 0B 0B
这意味着我将拥有 10 GB,再加上大约 2 GB(缓冲区/缓存),可以在需要时使用。
但当我执行 QEMU 时,我只能指定最多 10G 的 RAM;那是对的吗?我可以做些什么来使这 2 GB 可用吗?
谢谢。
答案1
我相信您可能会因free -h
输出舍入可用空间而遇到问题。尝试检查它-h
,看看到底有多少字节是可用的,然后设置qemu
使用该限制内的某些内容(给自己一点空间)。
另一方面,如果您尝试将所有可用 RAM 用于虚拟机,我强烈建议您启用交换空间。拥有交换区比内存耗尽并挂起要好。
我会尽可能多地保留可用空间,因为磁盘交换会占用大量时间。
(对于将来访问此内容的任何人:请参阅http://www.linuxatemyram.com/为什么您应该能够使用超过 10 GiB。缓冲区/高速缓存区域可提高性能,但当程序需要更多 RAM 时会自动释放。)
答案2
缓冲区/缓存将随着您使用系统而增长,除非内存用于其他目的。它们用于提高性能,但当内存用于其他目的时,空间就会被释放。
看起来应该能够为 QEMU 分配最多 11 GB 的空间,尽管如果没有交换文件我就无法分配。有了足够大的交换文件,您应该能够分配给 QEMU 超过 16GB。如果您的服务器内存不足,性能将受到极大影响。
另一个重要的价值是共享。如果您有多个虚拟机,QEMU 可能为其代码提供一些共享内存。无论有多少进程使用共享内存,都只需要一份共享内存的副本。