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

不懂就问,为什么明明内存没有吃满,还会使用虚拟内存?

  •  
  •   movq · 2021-01-07 16:14:19 +08:00 · 5693 次点击
    这是一个创建于 1423 天前的主题,其中的信息可能已经有所发展或是发生改变。

    ojSAP6mRVg23zkB

    用虚拟内存不是损耗磁盘吗

    17 条回复    2021-01-09 09:58:17 +08:00
    movq
        1
    movq  
    OP
       2021-01-07 16:15:33 +08:00
    sm.ms 的图片最近好像加载比较慢
    sadfQED2
        2
    sadfQED2  
       2021-01-07 16:34:31 +08:00 via Android
    操作系统觉得你这个数据很少使用,于是就会给你挪到虚拟内存,从而让物理内存更充足

    Linux 下面可以调整虚拟内存的使用权重,mac 不知道有没有类似的
    yulgang
        3
    yulgang  
       2021-01-07 17:09:35 +08:00
    如果 Mac 频繁的将内存写到虚拟内存,说明物理内存还是有点少,有条件就加内存,没有就无视吧。Mac 不想 Linux 可以调整 swappiness
    Bolvvv
        4
    Bolvvv  
       2021-01-07 18:27:26 +08:00
    同样的情况,不知道是什么策略。
    ![image.png]( https://i.loli.net/2021/01/07/2qvT1QwJdXZipGb.png)
    shyrock
        5
    shyrock  
       2021-01-07 18:39:44 +08:00
    反过来说,如果优先把物理内存用完,这时候有新任务开出来,是不是需要先释放一部分内存才能让新任务执行,这样感觉新任务的启动速度就很慢了。所以合理的做法是保留一些物理内存。
    secondwtq
        6
    secondwtq  
       2021-01-07 20:32:35 +08:00
    楼主不如给个 Activity Monitor 的截图 ... 因为我这没有新版 macOS,也没有 iStat Menus
    根据网上的截图,macOS 的 Activity Monitor 把物理内存占用分成“已使用内存”和“已缓存文件”两部分,而“已使用内存”进一步被分为“应用内存”“联动内存”和“已压缩”三部分,所以楼主的实际物理内存占用是“应用内存”+“联动”+“已压缩”+“缓存”,which 差不多接近了 16GB 。
    这个“活跃”就不知道是哪来的了 ...
    secondwtq
        7
    secondwtq  
       2021-01-07 20:43:27 +08:00
    查了下资料,好像 macOS 把某种内存又分为了“活跃”和“非活跃”两类,需要换出到交换区时应该会优先换出“非活跃”页。iStat Menus 里面的“实际可用”搞不好“实际”把“非活跃”给算进去了。
    billlee
        8
    billlee  
       2021-01-07 22:27:21 +08:00
    1. 系统觉得有些文件缓存更常用,所以选择优先把内存给这些缓存用
    2. 之前内存压力大的时候,把部分数据写入了虚拟内存,现在压力降下来了,但没人去读那部分数据,系统就把它留在那里
    zictos
        9
    zictos  
       2021-01-07 22:32:28 +08:00   ❤️ 2
    内存不应该吃满,应该预留一些面对突发的大内存需求,不然你突然开启一个很占内存的程序就要卡死。不要听什么“内存是拿来用的,内存大就可以尽情使用”之类的话,适当可以,但不应该太过,必须尽量预留一点。
    M1hahahaha
        10
    M1hahahaha  
       2021-01-07 22:35:48 +08:00   ❤️ 1
    不用纠结这些,硬盘在那,不消耗它,它也没法给你创造好吃的,不如给你干的能干的事。
    Apple 这项技术,10 年了吧,没有说因为这项技术让客户的硬盘损坏或者换电脑,在你换电脑时,他还能使劲的消耗个没完,经历比你旺盛。
    Elethom
        11
    Elethom  
       2021-01-07 22:51:15 +08:00 via iPhone
    你 inactive 没显示。
    Lemeng
        12
    Lemeng  
       2021-01-07 23:03:14 +08:00
    预设,不用纠结
    bojongle
        13
    bojongle  
       2021-01-07 23:09:51 +08:00
    就举个最简单的例子,你的操作系统只有 kernel 会在 ram 里,剩下的部分都在硬盘里。操作系统没学好啊你
    typetraits
        14
    typetraits  
       2021-01-08 09:47:21 +08:00
    这是 macOS 的默认内存策略,pressure 大于 60%还是 65%时就会开始使用交换文件,可以使用 memory_pressure 命令测试一下
    内存够大的话可以换种策略,但是不能完全禁用,进恢复模式的终端里执行 nvram boot-args="vm_compressor=2"

    具体定义在 https://opensource.apple.com/source/xnu/xnu-7195.50.7.100.1/osfmk/vm/vm_pageout.h.auto.html
    #define VM_PAGER_COMPRESSOR_NO_SWAP 0x2
    #define VM_PAGER_COMPRESSOR_WITH_SWAP 0x4
    louettagfh
        15
    louettagfh  
       2021-01-08 11:27:56 +08:00
    你没有理解操作系统中什么是虚拟内存,什么是物理内存
    l33ch
        16
    l33ch  
       2021-01-08 16:46:33 +08:00
    aneostart173
        17
    aneostart173  
       2021-01-09 09:58:17 +08:00
    我觉得你想说的是 swap space 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2643 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:30 · PVG 18:30 · LAX 02:30 · JFK 05:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.