Virtualbox / Vagrant 在日常使用过程中“被远程主机关闭”

Virtualbox / Vagrant 在日常使用过程中“被远程主机关闭”

我正在尝试在 Ubuntu 环境中安装 OpenTreeMap。托管在 DigitalOcean,这是他们的“Droplet”之一。作为安装过程的一部分,我已安装并配置 Virtual Box 和 Vagrant 来虚拟化环境。我已完成各种操作apt-get install,但每次都与 Virtual Box 断开连接。

[Unpacking libicu48 (from .../libicu48_4.8.1.1-3_i386.deb) ... [/*varies*/]
Connection to 127.0.0.1 closed by remote host.
Connection to 127.0.0.1 closed.

我执行使用:

vagrant up
vagrant ssh

一旦虚拟化,下载/安装软件包时连接就会关闭。并不总是同一个停止点,但它总是强制断开连接。我仍然通过 SSH 连接到我的盒子,当我运行时,vagrant status我将虚拟盒子显示为“已中止”:

Current VM states:

default                  aborted

The VM is in an aborted state. This means that it was abruptly
stopped without properly closing the session. Run `vagrant up`
to resume this virtual machine. If any problems persist, you may
have to destroy and restart the virtual machine.

更新:尝试了评论中的建议,我通过这个过程进一步接近了,但它仍然通过正常使用强制断开连接vagrant。这一次,在一个pip install命令下。

有任何线索可以解释为什么会发生这种情况吗?

答案1

这听起来像是以下两件事之一:

  1. 您帖子的这一部分:“我将虚拟盒显示为“已中止”:”听起来像是虚拟机内核崩溃并关闭。如果是这种情况,则虚拟机映像可能有问题,或者与虚拟盒不兼容。您可以在运行更新之前尝试安装虚拟盒工具。(https://forums.virtualbox.org/viewtopic.php?f=24&t=36752

  2. SSH 超时...:您还可以编辑 ssh 配置(mac/linux 上的 ~/.ssh/config)并添加以下文本。这将尝试让您的 ssh 连接保持更长时间的打开状态。您的里程将根据您连接的盒子上的 sshd 配置而有所不同。

    Host *
    ServerAliveInterval 25
    ServerAliveCountMax 20
    

您还可以启动 screen 或 tmux 之类的程序来保持会话运行。这将排除 SSH 超时。如果您的更新要求您在某些提示符下输入 Y/N 等,这可能是一个坏主意...

答案2

我遇到了同样的问题,内存被一个大rsync命令填满了。同样适用于虚拟机cp内部。我想如果命令mv很大,情况也会一样。您需要更多内存或找到解决方法。apt install ...pip install ...

htop您也可以尝试通过从主机运行脚本/配置并在另一个选项卡中找出原因。对我来说,RAM 每秒都会变得越来越满,直到发生内存不足 (OOM killer) 时崩溃。ssh错误只是结果,而不是根本原因。

一种可能的解决方法是:

mount --bind host-shared-dir mountpoint

笔记

如果有人知道为什么当你rsync在虚拟机中时 cp/mv/rsync 会从主机占用如此多的 RAM,请解释一下;)

答案3

参考这里的其他答案:是的,它似乎是 RAM。

我刚刚在 VirtualBox 上创建了一个 Fedora vagrant 环境,遇到了类似的问题。当我尝试执行“dnf check-update”之类的操作时,我与发帖人一样断开了 ssh 会话的连接。

VirtualBox 设置中的 RAM 仅设置为 512 MB。所以我只是将其增加到 1024 MB。看起来这已经解决了问题。

...虽然重启电脑也可能起到了积极作用,甚至是解决方案。因为有时我会从操作系统收到消息,说我的 RAM 不足(我现在有一些硬盘问题,虽然问题不大,但有时没有足够的硬盘空间用于 RAM 交换空间),所以重启通常会有所帮助。我在更改 VirtualBox 中的 RAM 数量之前不久重启了电脑,所以现在不确定这两种方法中的哪一种解决了这个问题。

相关内容