V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
movq
V2EX  ›  macOS

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

  •  
  •   movq · Jan 7, 2021 · 6374 views
    This topic created in 1940 days ago, the information mentioned may be changed or developed.

    ojSAP6mRVg23zkB

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

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

    Linux 下面可以调整虚拟内存的使用权重,mac 不知道有没有类似的
    yulgang
        3
    yulgang  
       Jan 7, 2021
    如果 Mac 频繁的将内存写到虚拟内存,说明物理内存还是有点少,有条件就加内存,没有就无视吧。Mac 不想 Linux 可以调整 swappiness
    Bolvvv
        4
    Bolvvv  
       Jan 7, 2021
    同样的情况,不知道是什么策略。
    ![image.png]( https://i.loli.net/2021/01/07/2qvT1QwJdXZipGb.png)
    shyrock
        5
    shyrock  
       Jan 7, 2021
    反过来说,如果优先把物理内存用完,这时候有新任务开出来,是不是需要先释放一部分内存才能让新任务执行,这样感觉新任务的启动速度就很慢了。所以合理的做法是保留一些物理内存。
    secondwtq
        6
    secondwtq  
       Jan 7, 2021
    楼主不如给个 Activity Monitor 的截图 ... 因为我这没有新版 macOS,也没有 iStat Menus
    根据网上的截图,macOS 的 Activity Monitor 把物理内存占用分成“已使用内存”和“已缓存文件”两部分,而“已使用内存”进一步被分为“应用内存”“联动内存”和“已压缩”三部分,所以楼主的实际物理内存占用是“应用内存”+“联动”+“已压缩”+“缓存”,which 差不多接近了 16GB 。
    这个“活跃”就不知道是哪来的了 ...
    secondwtq
        7
    secondwtq  
       Jan 7, 2021
    查了下资料,好像 macOS 把某种内存又分为了“活跃”和“非活跃”两类,需要换出到交换区时应该会优先换出“非活跃”页。iStat Menus 里面的“实际可用”搞不好“实际”把“非活跃”给算进去了。
    billlee
        8
    billlee  
       Jan 7, 2021
    1. 系统觉得有些文件缓存更常用,所以选择优先把内存给这些缓存用
    2. 之前内存压力大的时候,把部分数据写入了虚拟内存,现在压力降下来了,但没人去读那部分数据,系统就把它留在那里
    zictos
        9
    zictos  
       Jan 7, 2021   ❤️ 2
    内存不应该吃满,应该预留一些面对突发的大内存需求,不然你突然开启一个很占内存的程序就要卡死。不要听什么“内存是拿来用的,内存大就可以尽情使用”之类的话,适当可以,但不应该太过,必须尽量预留一点。
    M1hahahaha
        10
    M1hahahaha  
       Jan 7, 2021   ❤️ 1
    不用纠结这些,硬盘在那,不消耗它,它也没法给你创造好吃的,不如给你干的能干的事。
    Apple 这项技术,10 年了吧,没有说因为这项技术让客户的硬盘损坏或者换电脑,在你换电脑时,他还能使劲的消耗个没完,经历比你旺盛。
    Elethom
        11
    Elethom  
       Jan 7, 2021 via iPhone
    你 inactive 没显示。
    Lemeng
        12
    Lemeng  
       Jan 7, 2021
    预设,不用纠结
    bojongle
        13
    bojongle  
       Jan 7, 2021
    就举个最简单的例子,你的操作系统只有 kernel 会在 ram 里,剩下的部分都在硬盘里。操作系统没学好啊你
    typetraits
        14
    typetraits  
       Jan 8, 2021
    这是 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  
       Jan 8, 2021
    你没有理解操作系统中什么是虚拟内存,什么是物理内存
    l33ch
        16
    l33ch  
       Jan 8, 2021
    aneostart173
        17
    aneostart173  
       Jan 9, 2021
    我觉得你想说的是 swap space 。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2569 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 83ms · UTC 07:43 · PVG 15:43 · LAX 00:43 · JFK 03:43
    ♥ Do have faith in what you're doing.