我在一台 4 核 AMD Phenom 机器上运行 32 位 Ubuntu 10.04,该机器有 4GB 的 RAM。在正常使用情况下(十几个 Chrome 标签、1 台 VirtualBox 机器、2 或 3 个 QtCreator 实例),内存偶尔会填满 95% 以上,机器几乎无响应。
如果我在这些期间查看系统监视器,它会显示内存使用率超过 95%,但我的 9GB 交换分区中只有几百 MB 被使用!为什么不将更多内存转移到交换分区以避免耗尽?
答案1
从交换中获取内存非常慢。Linux 使用所有可用内存,节省少量内存以快速运行命令。当需要内存且无法通过其他方式获得时,它将进行交换。
Linux 还会将您在内存中读取和写入的所有文件缓冲到 LRU 缓存中。如果程序需要内存,这些缓冲区可以快速释放。考虑到您正在运行的程序,您的缓冲区可能不足,而通常由缓冲区提供的 I/O 正在从磁盘读取。
您可以调整 swappiness 参数,但您可能希望先检查一下发生了什么。尝试安装sar
实用程序(包sysstat
)并在后台运行它。然后,您可以检查它生成的文件,以查看哪些资源正在成为瓶颈。
答案2
补充一下 Bill 的回复:
由于开销较大,应尽可能避免使用交换。我相信较新版本的 Ubuntu 将“swappiness”的默认值设置为 10(仅当可用 RAM 不足 10% 时才开始使用交换)。我相信这与您所看到的情况非常一致。
如果出于某种原因,您想尽早开始使用交换(即为了有足够的可用内存来启动新的 VM 映像),那么您可以考虑增加“swappiness”值。以下指南介绍了如何执行此操作并提供更多信息(请参阅“为什么我的交换未被使用?”部分)。