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

不懂就问,为啥要关掉交换内存

  •  
  •   phub2020 · 2021-12-20 11:20:03 +08:00 · 8551 次点击
    这是一个创建于 1074 天前的主题,其中的信息可能已经有所发展或是发生改变。

    难道交换内存机制不是好东西嘛?为啥有老哥想要关掉,觉得交换内存不好。我不太能理解,如果本身内存买的不高,交换内存机制不更可以突破使用上限嘛?

    46 条回复    2021-12-21 19:17:29 +08:00
    xtinput
        1
    xtinput  
       2021-12-20 11:21:49 +08:00   ❤️ 19
    他们的 mbp 是供起来的,交换内存频繁读写硬盘消耗硬盘寿命
    linct96
        2
    linct96  
       2021-12-20 11:23:03 +08:00
    怎么打开这个设置呢?还是默认就是开着的
    xtinput
        3
    xtinput  
       2021-12-20 11:23:17 +08:00
    @linct96 默认是打开的
    lovedoing
        4
    lovedoing  
       2021-12-20 11:24:51 +08:00   ❤️ 5
    电池循环党,内存占用党,硬盘写入党 😅
    cwbsw
        5
    cwbsw  
       2021-12-20 11:26:17 +08:00
    我猜是受了早年网上一些所谓 Windows“优化”文章的影响。
    hsir
        6
    hsir  
       2021-12-20 11:27:16 +08:00
    可能是对苹果的内存管理机制感到不满,因此强行介入交换机制
    Telegram
        7
    Telegram  
       2021-12-20 11:27:31 +08:00
    这玩意是不是类似 win 的那个虚拟内存
    riceathome
        8
    riceathome  
       2021-12-20 11:27:34 +08:00   ❤️ 2
    有两种人 一种极端的保护设备 保护到令人发指的地步 另一种认为机器买来就应该当场砸掉 但凡爱惜一点都不行
    yc8332
        9
    yc8332  
       2021-12-20 11:29:10 +08:00   ❤️ 1
    真的是想太多了。。16 年买的本子,一直用,也就换了个电池。。
    cheng6563
        10
    cheng6563  
       2021-12-20 11:31:08 +08:00
    mac 不知道,反正 linux 不开 swap 或者 swappiness 设为 0 时内存一满就等着强行关机吧。
    win 的虚拟内存不等于交换内存
    lscexpress
        11
    lscexpress  
       2021-12-20 11:37:12 +08:00
    @riceathome 我是一点也不爱惜,我手机都不贴膜。但我是正常使用,什么设置好,什么优化等等,我都是直接使用出场设置。但我绝不会砸掉,或者故意损害任何设备。
    felixcode
        12
    felixcode  
       2021-12-20 11:40:36 +08:00
    内存够多时就可以关闭 swap (或虚拟内存),避免数据交换到磁盘 IO 影响性能。
    当然,如果非要说 SSD 几十倍的延时和吞吐下依然用起来和内存一样,那也没什么好反驳的。
    关不掉( MacOS 不能直接关)或者没法关(内存还没多到能关的地步)的,当然也就不知道为什么要关了。
    felixcode
        13
    felixcode  
       2021-12-20 11:44:13 +08:00
    @felixcode
    SSD 几十倍的延时和吞吐 -> SSD 几十倍的延时和几十分之一的吞吐下。
    Brentwans
        14
    Brentwans  
       2021-12-20 11:45:48 +08:00
    个人用户正常开启,没必要关闭的。担心频繁磁盘 IO 读写更是没必要了。
    不过如果内存很大,磁盘不快的话可以选择关闭。阿里云服务器好像默认是关闭的 swap 的,不知道是为了性能,还是担心写坏磁盘的。
    testver
        15
    testver  
       2021-12-20 11:46:02 +08:00
    正常用吧,搞清楚谁为谁服务。

    就是个工具,坏了就换,费那劲。
    nevin47
        16
    nevin47  
       2021-12-20 11:47:44 +08:00   ❤️ 3
    第一句话就是错的哈,在内存足够的情况下,SWAP 不是一个好的机制。介质时延差了上百倍,SWAP 命中了还是靠 pagefault 来搞事儿,高负载的时候还时不时的引入一次 long wait swap ,一般高可靠的场景都是要关掉 SWAP 的
    tulongtou
        17
    tulongtou  
       2021-12-20 11:49:32 +08:00
    生怕用了一些硬盘,SSD 寿命就到头了。可是 Mac 电脑开始用 SSD 有快十来年了,没听说谁是因为 ssd 写入过多损坏的。总结起来就是杞人忧天。
    zhongerbing
        18
    zhongerbing  
       2021-12-20 12:05:22 +08:00   ❤️ 3
    看情况吧,如果自身 32g 和 64g 内存,swap 反而没必要
    lucifer9
        19
    lucifer9  
       2021-12-20 12:11:23 +08:00 via iPhone
    内存足够的定义就是不需要 swap
    hello2090
        20
    hello2090  
       2021-12-20 12:25:50 +08:00 via iPhone   ❤️ 2
    苹果没做好,帮他手动调优呗。苹果不懂苹果电脑
    ShadowPower
        21
    ShadowPower  
       2021-12-20 14:04:16 +08:00   ❤️ 2
    现在内存已经足够便宜,已经用不上磁盘来做交换了。
    64GB 物理内存开了 64GB 的 ZRAM ,许多内存数据都是程序、文本、全 0 或者全 1 的内容,压缩率可以达到 25%。只要用 16GB 的物理内存就可以代替 64GB 的 swapfile 。
    然后还有 48GB 的物理内存可用,最终可以装下 112GB 的内存页面。

    以我的需求来看,够用了。
    WuSiYu
        22
    WuSiYu  
       2021-12-20 14:21:29 +08:00   ❤️ 1
    一件比较违反常识的事是,哪怕内存足够,swap 也是有用的,举个例子:有些程序可能几天都不会动一下,与其让它占内存,不如扔到 swap 里,内核用这些空间当 cache ,性能反而会更高
    GrayXu
        23
    GrayXu  
       2021-12-20 15:25:27 +08:00
    @WuSiYu 对比就是 程序指定的数据 和 未指定的数据,哪些更可能在未来被调用?从这个角度上来看,开 swap 的收益应该是程序优化的差(即自己调度的没有 OS 调度的好)才会体现出来吧。 [只讨论服务器场景]
    minsheng
        24
    minsheng  
       2021-12-20 15:30:23 +08:00
    @GrayXu 说个最简单的情况,内存漏了,比如说每关一个标签页漏一下,这种场景就天生适合内存交换……

    Apple 的 Cocoa 框架有些很迷的东西,有一个 autorelease pool 。这个是古时候的技术了,在 Apple 上了 ARC 自动引用计数之后似乎程序员就接触不到了,所以我也不是很清楚。但是我观察到,调用一些系统框架的时候,这些框架依然会使用这玩意,导致对象虽然释放了,但内存不会,要等一段不明时间才会莫名其妙释放掉。这种情况感觉也用得上。
    felixcode
        25
    felixcode  
       2021-12-20 15:39:04 +08:00
    @WuSiYu
    一般说内存够都是说内存既足以用于 cache 也同时可以关 swap 。内存够的话服务器和桌面环境都能满足。
    唯一想到内存足够的情况下需要开启 swap 的理由就是避免意外的内存泄漏,而这大多是内核或程序设计的问题了。
    felixcode
        26
    felixcode  
       2021-12-20 15:40:15 +08:00
    @felixcode
    避免意外的内存泄漏 -》 避免意外的内存泄漏造成的系统崩溃。
    clrss
        27
    clrss  
       2021-12-20 15:42:50 +08:00   ❤️ 1
    1. M1 Mac 的 TBW 增长确实不正常, 一个月几十 T, 比我 Intel 机型 2 年的还多
    2. 现在 SSD 1000 次的擦写值确实只能支持几百 TBW
    2.1. 用掉 80% TBW 以后, 可以认为报废了. 不可能真的等丢数据了再换
    3. 集成式 SSD 没法简单的更换
    4. M1 的性能 5 年不过时 8 年不淘汰. 就这样报废整机是不是不太甘心?
    nikolai
        28
    nikolai  
       2021-12-20 15:53:51 +08:00
    虽然都吐槽硬盘写入高,但我还没见过 MacBook 的硬盘写坏的
    shika
        29
    shika  
       2021-12-20 15:59:54 +08:00 via Android
    在 Linux 下,我的理解是不管你内存有多大,swap 不管大小如何设置,还是要有的,MAC 下 swap 工作机制不一样?
    felixcode
        30
    felixcode  
       2021-12-20 16:05:20 +08:00
    @nikolai
    https://medium.com/codex/my-macbook-air-m1-is-dead-a394e3581e95
    https://news.ycombinator.com/item?id=27065953

    虽然文章没直接说是写入量过大造成的,但的确是高负载使用,很可能和写入量有关,而且硬盘坏了之后直接丢了 800G 的数据。
    xqk111
        31
    xqk111  
       2021-12-20 16:08:05 +08:00
    这个还能设置?
    Cielsky
        32
    Cielsky  
       2021-12-20 17:01:21 +08:00 via Android
    @felixcode 内存够多为什么会用到 swap 呢?此时关与不关有什么区别
    felixcode
        33
    felixcode  
       2021-12-20 17:12:22 +08:00
    @Cielsky
    内存够多依然会用到 swap ,跟设置的策略有关,linux 下是通过修改内核的 vm_swappiness 参数(默认 60 )来调整策略的,如果设为 0 的话就不使用 swap, 很多建议设置为 1 。
    具体计算方法可以看这篇文章。
    https://access.redhat.com/solutions/103833
    neptuno
        34
    neptuno  
       2021-12-20 17:28:35 +08:00
    有些人 64g 内存确实不需要吧,而且 m1 写入确实夸张了,导致有些人比较焦虑
    WuSiYu
        35
    WuSiYu  
       2021-12-20 17:29:38 +08:00
    @felixcode 这只是一种观点了,它的前提是内存永远都是不够用的,毕竟除了被动的缓存,内核还可以主动的预读。不过实际上会有大内存+轻载的情况,此时内存本身都有闲置,自然就没 swap 什么事了
    从另一个角度讲,这个观点认为,如果 swap 被用到了,往往是利大于弊的,而如果 swap 使用为 0 ,那除了占用一点硬盘空间之外也不会有副作用(况且 macos 的 swap 可以自动缩放)
    至于内存泄漏,我觉得在 macos 上是个相当现实的问题。。。
    gps949
        36
    gps949  
       2021-12-20 17:30:04 +08:00
    提速?都 64G 内存了,还用 swap 感觉就是故意摸鱼
    alexkkaa
        37
    alexkkaa  
       2021-12-20 17:39:34 +08:00 via Android
    mac 内存普遍偏小 swap 还是有用的。但是当你用上 64g 内存,swap 常年 0 占用很正常
    beimenjun
        38
    beimenjun  
       2021-12-20 17:46:51 +08:00
    其实多少也和 Apple 在大内存的内存策略无法被人信任有关系。

    Apple 很多内存策略很迷,内存还剩几百 G ,但是使用的部分超过 50%,就开始 Compress 内存了。
    dengshen
        39
    dengshen  
       2021-12-20 23:07:38 +08:00 via iPhone
    有内存不用偏偏占用几 g 的 swap 。我也想关掉,并不是怕写硬盘
    icyalala
        40
    icyalala  
       2021-12-21 00:27:17 +08:00
    你要愿意接受内存不够时 OOM 杀 App ,那大可以关闭 swap 。。
    wobuhuicode
        41
    wobuhuicode  
       2021-12-21 09:06:56 +08:00
    实话实话,前几年我也不喜欢把机器供起来养的。手机屏幕不贴膜不带套,电脑也是随便开着。
    后来同一个型号的手机出二手,我老婆的手机贴膜戴套的出二手,比我的价格能贵上 1.2K 。后来也就妥协了。花个 50 块不到贴膜戴套,出二手的时候还能回本更多。
    gps949
        42
    gps949  
       2021-12-21 10:52:14 +08:00
    @wobuhuicode
    虽然跑题了。
    但这个不能只看资金成本吧?膜套是只值 50 ,但你不喜欢“供着”使用的感受,那么带膜套并且小心使用的心情成本每天值个冰淇淋的钱吧?按奶油冰淇淋 3-4 块(就按 3.5 吧),那么假设你手机使用一年出新型号就换,3.5*365+50=1327.5 元。相当于多花 1327.5 然后卖二手多卖 1200 ? doge
    uleh
        43
    uleh  
       2021-12-21 11:15:05 +08:00
    SWAP 关掉是为了加速吧
    不过内存不是很充裕的情况下,还是老老实实相信操作系统自己的优化比较好
    wobuhuicode
        44
    wobuhuicode  
       2021-12-21 14:30:21 +08:00
    @gps949 我觉得我和你的想法刚好相反,反而是贴膜和带套之后,用起来就没那么小心翼翼了。没带外套时候手机比较硬,放在桌子上都需要轻轻的放下。
    wu67
        45
    wu67  
       2021-12-21 15:03:55 +08:00
    部分回复 yygq 其实没必要....这玩意在部分场景下确实是有用的, 禁前提是你内存本身不够大的情况. 如果 32 64G 了, 一天到晚剩下十几~几十 G 内存空着, 那想关就关, 反正也不会怎样
    iwj
        46
    iwj  
       2021-12-21 19:17:29 +08:00
    感谢大家的分享和讨论,个人觉得,在 8 楼提到的那两种极端中间找一个适合自己的度就可以了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1080 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:45 · PVG 03:45 · LAX 11:45 · JFK 14:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.