V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Aaaron
V2EX  ›  VMware

#请教#笔记本物理内存 8G, VMware 里面装两个虚拟机各分 4G 内存同时运行,会发生什么?

  •  
  •   Aaaron · 2017-03-15 19:41:53 +08:00 · 8999 次点击
    这是一个创建于 2795 天前的主题,其中的信息可能已经有所发展或是发生改变。
    20 条回复    2018-10-03 22:36:53 +08:00
    Aaaron
        1
    Aaaron  
    OP
       2017-03-15 19:47:12 +08:00
    #已经测试# 8G 物理内存,两个虚拟机各分 4G 和 1G 内存,同时运行没发生任何问题。
    nszm
        2
    nszm  
       2017-03-15 19:47:23 +08:00
    物理内存并不会发生改变
    vibbow
        3
    vibbow  
       2017-03-15 19:48:15 +08:00
    其中一个虚拟机会被强制暂停,理由是内存不足。
    UnisandK
        4
    UnisandK  
       2017-03-15 19:50:26 +08:00
    virtio_balloon
    都跑满会占到你电脑的硬盘交换区
    Aaaron
        5
    Aaaron  
    OP
       2017-03-15 19:51:14 +08:00
    @nszm @vibbow 物理内存应该不会发生变化,也有人说是`会无限交换内存,最终三台机器都卡爆`。
    Aaaron
        6
    Aaaron  
    OP
       2017-03-15 19:52:08 +08:00
    @UnisandK 假设虚拟机没有分交换分区呢?
    rexpower
        7
    rexpower  
       2017-03-15 19:52:32 +08:00
    两个虚拟机各分 4G 内存,同时运行的话,不见得在这期间,这两个虚拟机都实际占用掉接近 4G 的内存吧,你再在虚拟机里跑跑占内存的任务试一试?
    Aaaron
        8
    Aaaron  
    OP
       2017-03-15 19:54:36 +08:00
    @rexpower 我还没有尝试,不过虚拟机用去 4G+1G 之后,内存就已经在 95%了。
    UnisandK
        9
    UnisandK  
       2017-03-15 19:54:50 +08:00
    @Aaaron OOM-Killer 逮个杀个呗
    ys0290
        10
    ys0290  
       2017-03-15 19:54:59 +08:00 via iPhone
    在限额范围内内存是用多少给多少,一旦跑起来后俩虚拟机都内存满载了,就死机了
    我的 esxi 里面虚拟了一个软路由,我一时疏忽给各个虚拟机分配的内存总和大于物理内存了,结果只要物理内存用满了,就网络瘫痪,软路由重新拨号了😂
    Aaaron
        11
    Aaaron  
    OP
       2017-03-15 19:56:45 +08:00
    @rexpower 当然宿主机的应用就会占掉 30%左右的内存(开了 Chrome
    Aaaron
        12
    Aaaron  
    OP
       2017-03-15 20:02:48 +08:00
    @UnisandK @ys0290 所以目前有两种说法:
    1. 内存高达一定程度时,至少有一个虚拟机会由于内存不足被强行停止;
    2. 物理内存用满之后,死机。
    billlee
        13
    billlee  
       2017-03-15 20:06:27 +08:00
    ESXi 会给每个虚拟机分配一个和内存同样大小的交换文件,所以用满就会交换。 Workstation 没用过,我就不清楚了。
    loading
        14
    loading  
       2017-03-15 20:10:48 +08:00 via Android
    有虚拟内存或者 swap ,你忘了吗?
    Aaaron
        15
    Aaaron  
    OP
       2017-03-15 20:28:55 +08:00
    @loading
    1. 讲道理安装过程中可以不设 Swap 分区;
    2. 「虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存,而实际上它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。」——摘自维基百科,所以说由于虚拟内存的存在,由于内存不足被强制停止应该不会发生;
    3. 但是实际使用中,的确有过内存不足, 某个程序无法运行。
    zts1993
        16
    zts1993  
       2017-03-15 21:39:11 +08:00
    首先操作系统中的内存不是直接对应物理地址,当然虚拟机问题得另外说。

    很多虚拟化软件不会在启动时候强制要求你一定有这么多内存(当然不能太离谱,所以超售是允许的)。
    虚拟化中有超用技术比如 kvm 的 balloon
    还有内存压缩合并 ,比如 kvm 的 KSM
    加上本机操作系统也会用上虚拟内存。。

    所以只会比较卡而已,如果是 ssd 的话会比较稳一点。。
    Aaaron
        17
    Aaaron  
    OP
       2017-03-15 21:56:53 +08:00
    1. http://hujizhou.blog.51cto.com/514907/1688815 这篇文章也证明了您的观点。所以应该只是影响性能,最后系统也不会卡死。
    2. 但是,内存交换 怎么发生呢
    3. 如果发生了内存交换,不知道回收哪些内存会导致系统卡死吗?
    @zts1993
    zts1993
        18
    zts1993  
       2017-03-15 22:17:27 +08:00
    @Aaaron 系统最后是有可能卡死的。。卡死:一般来说值得是没有响应或者响应时间特别长比如磁盘忙碌。。

    你的内存空间申请都是向操作系统申请的虚拟内存,虚拟内存到物理内存+交换分区会有一个映射。
    内存快不够的时候会发生内存交换 ,具体激进程度可以配置。
    电脑不存在不知道这个问题,可能刚刚交换到磁盘上但是这个时候又需要读取,也就是又"缺页",然后把数据加载到内存。。

    这样一来一回磁盘占用是很厉害的,比如机械盘这种来回交换会直接卡住,响应时间会非常长,,产生假死的情况。。

    如果这个时候内存使用下降,交换减少,磁盘慢慢响应速度恢复,系统就正常了。。
    如果继续恶化,肯定是越来越卡,最后 bad malloc 程序可能会 crash 掉或者退出
    liantian
        19
    liantian  
       2017-03-16 08:07:28 +08:00 via Android
    既然你放到 vmware 节点下,那就是不考虑 kvm/hyper-v 吧....

    vmware 的话, esxi 会用 swap , esxi 为每个虚机独立分配 swap 空间,文件名叫 vswp ,在虚拟机目录内,大小和内存大小相等,空间预分配。主机内存不够就会使用这块 swap 。如果服务器本地有 ssd ,而且挂载到 esxi 或者正好是 esxi 的所在分区, swap 会放在 ssd 上。



    workstation 的话,类似,会在虚拟机目录创建 vmem 文件,但不会自动飘到 ssd 里。


    所以俩虚拟机内存都满了会怎样.......会很慢
    xyjincan
        20
    xyjincan  
       2018-10-03 22:36:53 +08:00
    用完内存后,系统就卡死了,全部完蛋
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2838 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 02:07 · PVG 10:07 · LAX 18:07 · JFK 21:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.