Macos Htop说:“这是一个很好的例子。”;530G“;在;VIRT“;至于;流浪汉“宋承宪”;

Macos Htop说:“这是一个很好的例子。”;530G“;在;VIRT“;至于;流浪汉“宋承宪”;,macos,memory,vagrant,virtualbox,htop,Macos,Memory,Vagrant,Virtualbox,Htop,我在MacOS上使用Vagrant和ubuntu64 16.04。运行htop,我可以看到vagrant ssh进程实际上可以使用530G(在VIRT列中) 这是流浪汉的正常行为吗?我应该恐慌吗?在mac电脑上拥有120G磁盘和16G RAM的虚拟530G是“正常”的吗?或者也许我不明白VIRT的意思 “漫游箱”在虚拟箱上运行,只分配了1G的RAM。回答方式: 嗨!我能够重现这种行为,但执行了任何流浪命令。vagrant ssh命令最容易看到这种行为,因为只要ssh会话处于活动状态,进程就会一直

我在MacOS上使用Vagrant和ubuntu64 16.04。运行
htop
,我可以看到
vagrant ssh
进程实际上可以使用530G(在
VIRT
列中)

这是流浪汉的正常行为吗?我应该恐慌吗?在mac电脑上拥有120G磁盘和16G RAM的虚拟530G是“正常”的吗?或者也许我不明白VIRT的意思

“漫游箱”在虚拟箱上运行,只分配了1G的RAM。

回答方式:

嗨!我能够重现这种行为,但执行了任何流浪命令。vagrant ssh命令最容易看到这种行为,因为只要ssh会话处于活动状态,进程就会一直运行

tl;下面的dr版本很简单:不用担心。VIRT未分配内存。如果是这样的话,您要么需要大量的交换空间,要么什么都不起作用。

那么,这是怎么回事?vagrant安装程序包括一个小型go可执行文件(vagrant),其任务是在当前环境中设置所需的所有内容的正确位置。安装程序bin目录、ruby和所有其他朋友的lib目录、所有gem以及流浪gem本身。一旦配置了所有这些,就会产生一个新进程,即实际的Ruby vagrant进程

因为您的示例引用的是vagrant ssh,正如前面所指出的()Kernel.exec的出现意味着Ruby进程无法持久,所以我想一定是包装器造成的。经过一番搜索(主要是为了找到stackoverflow上写着“不要担心VIRT”的物品),我偶然发现:

他们提到了golang FAQ,该FAQ讨论了一堆VIRT被预先声明,这不是什么大问题,但从来没有任何关于实际声明金额的绝对值。关于golang在创业时声称拥有一大块VIRT的行为,lwn的链接被删除了(),但所有引用的内容都比我在当地看到的要少得多。因此,我决定深入研究golang运行时代码,并在malloc.go中找到答案:

之所以会发生这种情况,是因为围棋包装器用来启动流浪者。因为您看到的VIRT只是一个预订,而不是实际分配的,所以这不是一个问题,也不应该担心

(在golang ML上有一些关于这种方法的优缺点的有趣对话,所有这些都是非常好的阅读)

这只是一个复制/粘贴(并将TLDR加粗),希望它能帮助其他人