不懂就问,为啥要关掉交换内存 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
phub2020
V2EX    Apple

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

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

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

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 默认是打开的
JsonNode
    4
JsonNode  
   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 的,不知道是为了性能,还是担心写坏磁盘的。
Fading2276
    15
Fading2276  
   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 的
DonaidTrump
    17
DonaidTrump  
   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  
PRO
   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     Solana     1469 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 29ms UTC 16:43 PVG 00:43 LAX 08:43 JFK 11:43
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86