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

macOS 的内存管理策略问题

  •  
  •   Nitroethane · 2020-03-04 18:34:21 +08:00 · 4059 次点击
    这是一个创建于 1754 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 空间

    第 1 条附言  ·  2020-03-04 20:40:39 +08:00
    感觉 16G 的内存已经不够用了,看来下次买 MBP 得 32G 起步 :)
    12 条回复    2020-03-06 09:39:14 +08:00
    leewi9coder
        1
    leewi9coder  
       2020-03-04 19:13:35 +08:00 via iPhone
    无脑相信苹果 信仰就完了
    di11wei
        2
    di11wei  
       2020-03-04 19:13:57 +08:00
    具体原理不懂,你把 istamenus 内存设置里面的「隐藏不活跃内存」取消选择再看看。另外应该看看活动监视器里面的内存显示吧。
    其他的不懂了。
    Nitroethane
        3
    Nitroethane  
    OP
       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
        4
    bookit  
       2020-03-04 20:18:20 +08:00
    macos 从 10.15 之后感觉换了个策略

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

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

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

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

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

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

    Nitroethane
        9
    Nitroethane  
    OP
       2020-03-05 12:55:18 +08:00
    @nyanyh #8 羡慕 64G 内存的(流下了没有 money 的泪水)
    zhanggang807
        10
    zhanggang807  
       2020-03-05 16:06:05 +08:00
    这么大内存不用,偏要使用 swap 空间,这是毛个策略?
    怪不得 linus 大神早就吐槽过 macOS 的内存管理就是个渣渣
    反正我自己是深有体会,苹果希望大家加钱买大内存吧
    shadowsockss
        11
    shadowsockss  
       2020-03-05 23:34:24 +08:00
    pmset -g 看下参数
    iWill
        12
    iWill  
       2020-03-06 09:39:14 +08:00
    我是 128g 内存,swap memory 一直都是 0 的。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   846 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:01 · PVG 05:01 · LAX 13:01 · JFK 16:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.