![为什么有些进程使用交换而其他进程不使用?](https://linux22.com/image/851248/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%9C%89%E4%BA%9B%E8%BF%9B%E7%A8%8B%E4%BD%BF%E7%94%A8%E4%BA%A4%E6%8D%A2%E8%80%8C%E5%85%B6%E4%BB%96%E8%BF%9B%E7%A8%8B%E4%B8%8D%E4%BD%BF%E7%94%A8%EF%BC%9F.png)
当我工作繁忙时,我的系统 (Ubuntu 13.10) 有时会冻结。Syslog 表示,由于内存不足,必须终止某个进程。
Killed process 4693 (chromium-browse) total-vm:1386284kB, anon-rss:31688kB, file-rss:3424kB
即使我的交换空间几乎是空的,也会发生这种情况。我有 4GB RAM 和 4GB 交换分区。
顶部说:
KiB Mem: 3932056 total, 2828880 used
KiB Swap: 4079612 total, 332492 used,
所以有足够的空间可用。但后来我发现,有些进程根本没有使用交换。它们似乎占用了我所有的物理 RAM,甚至没有考虑将一些页面交换到磁盘。我使用“top”的 SWAP 列来验证每个进程的 SWAP 使用情况。
例如 Chromium 网络浏览器和 VirtualBox。其他浏览器,如 Firefox、Netbeans 等,正在交换。
那么谁来“决定”哪些进程需要交换,哪些不需要呢?据我所知,这是由内核决定的,因为从应用程序的角度来看,内存就是内存,不区分交换和物理 RAM。这是真的吗,还是 Chromium 开发人员将应用程序设置为仅使用物理 RAM?
感谢您的帮助!
答案1
我认为您的“问题”出在 VirtualBox 上。
基本内存
这设置了虚拟机运行时分配的 RAM 数量。指定的内存量将从主机操作系统请求,因此在尝试启动虚拟机时,它必须可用或作为主机上的可用内存,并且在虚拟机运行时不会对主机可用。
我在 VirtualBox 论坛上发现了类似的评论(尽管它们没有那么有用)。
看:https://forums.virtualbox.org/viewtopic.php?f=2&t=50179
所以我猜想 virtualbox 内核模块会为客户机分配可用内存,但不会礼貌地通知主机。因此,当您查看可用 RAM(使用 等工具free -m
)时,您似乎有足够的内存,但是...由于内核模块不会通知主机操作系统,因此主机无法适当地管理交换,然后您的应用程序会因内存不足(可用或交换)而崩溃。
我建议你提交一个错误报告,但我猜它会被关闭,因为“无法修复”
摘自 Tim 评论中链接的 VirtualBox 论坛帖子:
回答你的问题:VBox 是否可以使用交换,答案是不能,只有操作系统才能做到这一点。交换不是实际可用的内存。
答案2
Linux 内核“决定”了这一点。它通过一个可调参数来实现这一点,该参数称为交换性。