macOS 的内存管理策略问题

2020-03-04 18:34:21 +08:00
 Nitroethane

Background:系统已经持续运行了 6 天。到目前为止,Chrome 共打开了 32 个标签页,跑了一个 IDEA,一个 Pycharm,Docker 跑了一个 MySQL,还有 Outlook、Teams、Excel、QQ、WeChat、网易云音乐。

现象:目前的内存使用情况:
从中午开始,Free 状态的内存一直在 5.8G 左右,系统开始频繁使用 swap,从中午的 5G 增长为现在的 9G。
这样来看的话,系统一直预留了 6G 左右的空闲内存。本来想着看能不能通过 sysctl 调整一下 swap 相关的内核参数,看能不能降低使用 swap 的频率,类似于 Linux 上的 swapniess 内核参数。然而通过 man sysctl 看了下,发现好像并没有相关的内核参数可供修改。
而且中午的时候,当内存使用处于某个点时,内核回频繁的进行 swap in 和 out 的操作,导致系统有卡顿。 总之,感觉 macOS 的内存管理不是很好?看来 macOS 更喜欢使用 swap 空间

4054 次点击
所在节点    macOS
12 条回复
leewi9coder
2020-03-04 19:13:35 +08:00
无脑相信苹果 信仰就完了
di11wei
2020-03-04 19:13:57 +08:00
具体原理不懂,你把 istamenus 内存设置里面的「隐藏不活跃内存」取消选择再看看。另外应该看看活动监视器里面的内存显示吧。
其他的不懂了。
Nitroethane
2020-03-04 19:36:59 +08:00
@di11wei #2 取消选择之后内存使用率 100%,其中 inactive 的有 5.5G 左右。在 activity monitor 中,memory used 12.58G ,cached files:3.6G 。可能 inactive 中包括 cached files,毕竟用来做 cache 的内存有大部分是可以立即回收的。
bookit
2020-03-04 20:18:20 +08:00
macos 从 10.15 之后感觉换了个策略

以前是尽量用内存,现在也用 swap

现在硬盘快了很多倍,策略也在与时俱进
Nitroethane
2020-03-04 20:35:42 +08:00
@bookit #4 即使硬盘快了很多倍,但还是比内存要慢不少。我觉得不应该更倾向于使用 swap,而且好像 macOS 的 swap 默认是加密的,这样一来使用 swap 的话开销太大了
yanyueio
2020-03-04 21:35:30 +08:00
应该是通用策略吧,照顾那些内存小的 MacOS 们,比如那些修图剪辑视频的,最好的情况当然是 64G 起步,但并不是每个公司都会给这些设计师后期人员高配置,那 16G 的人也要干活吧,苹果这里用交换空间的策略就保证了,虽然慢,但能完成交付。极端点的,比如某些游戏,内存不够的话,直接不给你运行。最后,非常同意楼主的 16G 不够了,但多数情况不是内存的原因而是编码程式员包装加包装调用层次太深,自己干底层能力不够导致很多中间层的调用导致。上学的时候跑某总公司的某工程,服务加载起来能跑半个小时,哦,打开工程大概 10 分钟左右,老旧的 eclipse 项目。
046569
2020-03-04 22:12:37 +08:00
LZ 的描述不足以判断系统内存管理存在问题.

如果中午觉得卡顿,那么当时活动监视器中的内存压力是否为红色?或者在终端中使用命令 memory_pressure 来模拟内存紧张时的情况?

从 iStat 的截图中看到压力不大.

BTW,macOS 的内核 XNU 是开源的,包括内存管理的代码.
nyanyh
2020-03-05 12:14:05 +08:00
内存管理代码在 xnu/osfmk/vm 下

虽然这个 flag 名字里有 NO_SWAP,实际使用时仍然会使用一些交换文件,但是几个月下来不会超过 4G

Nitroethane
2020-03-05 12:55:18 +08:00
@nyanyh #8 羡慕 64G 内存的(流下了没有 money 的泪水)
zhanggang807
2020-03-05 16:06:05 +08:00
这么大内存不用,偏要使用 swap 空间,这是毛个策略?
怪不得 linus 大神早就吐槽过 macOS 的内存管理就是个渣渣
反正我自己是深有体会,苹果希望大家加钱买大内存吧
shadowsockss
2020-03-05 23:34:24 +08:00
pmset -g 看下参数
iWill
2020-03-06 09:39:14 +08:00
我是 128g 内存,swap memory 一直都是 0 的。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/649864

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX