为什么有些进程使用交换而其他进程不使用?

为什么有些进程使用交换而其他进程不使用?

当我工作繁忙时,我的系统 (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 上。

根据VirtualBox 使用手册

基本内存

这设置了虚拟机运行时分配的 RAM 数量。指定的内存量将从主机操作系统请求,因此在尝试启动虚拟机时,它必须可用或作为主机上的可用内存,并且在虚拟机运行时不会对主机可用。

我在 VirtualBox 论坛上发现了类似的评论(尽管它们没有那么有用)。

看:https://forums.virtualbox.org/viewtopic.php?f=2&t=50179

所以我猜想 virtualbox 内核模块会为客户机分配可用内存,但不会礼貌地通知主机。因此,当您查看可用 RAM(使用 等工具free -m)时,您似乎有足够的内存,但是...由于内核模块不会通知主机操作系统,因此主机无法适当地管理交换,然后您的应用程序会因内存不足(可用或交换)而崩溃。

我建议你提交一个错误报告,但我猜它会被关闭,因为“无法修复”

摘自 Tim 评论中链接的 VirtualBox 论坛帖子:

回答你的问题:VBox 是否可以使用交换,答案是不能,只有操作系统才能做到这一点。交换不是实际可用的内存。

答案2

Linux 内核“决定”了这一点。它通过一个可调参数来实现这一点,该参数称为交换性

相关内容