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

WindowServer 让我产生了内存焦虑

  •  1
     
  •   sickoo · 2022-04-07 10:32:17 +08:00 · 8988 次点击
    这是一个创建于 990 天前的主题,其中的信息可能已经有所发展或是发生改变。

    作为 M1 16G 内存三大常驻客,一是 WindowServer ,另一个 Google Chrome helper ,最后一个 telegram 。

    第二个没办法摆脱,safari 能接受但是习惯了 chrome ,习惯的法则。最后一个电报也是需要挂着,这时候会感叹微信的小而美了。

    83 条回复    2022-09-10 13:00:18 +08:00
    devswork
        1
    devswork  
       2022-04-07 10:36:28 +08:00   ❤️ 1
    内存压力变黄了?
    iCong
        2
    iCong  
       2022-04-07 10:41:27 +08:00
    没黄问题就不大。16G 确实不够用了,开个 JB 家的 IDE 必黄。
    sickoo
        3
    sickoo  
    OP
       2022-04-07 11:10:30 +08:00
    @devswork 开多点就会。
    sickoo
        4
    sickoo  
    OP
       2022-04-07 11:11:03 +08:00
    @sickoo 多点应用。例如 vscode 加 jb 家的宝贝,或者 obs 录屏一个就能打了
    root01
        5
    root01  
       2022-04-07 11:14:37 +08:00
    tg 看毛片??
    ruidoBlanco
        6
    ruidoBlanco  
       2022-04-07 11:29:49 +08:00   ❤️ 10
    微信的小而美???
    chendy
        7
    chendy  
       2022-04-07 11:40:01 +08:00
    同 m1 16g ,无压力
    居家办公,微信、钉钉、idea 开两个项目、chrome 三个 profile 各开 10 个以内的 tab 、一个 vmware horizon ,一个 obs 录屏
    内存压力 50%不到……只能说 windowServer 有什么诡异的 bug
    darrh00
        8
    darrh00  
       2022-04-07 11:45:13 +08:00
    看了一下机器上,微信确实让我惊艳到啊,Wechat 只用了 245MB, 而 Telegram 用到了 1.5GB ,只加了 5 ,6 个群而已,而且只有两个群比较活跃。。。
    ngbdsb
        9
    ngbdsb  
       2022-04-07 12:14:28 +08:00
    现在除了有时候网页内存泄漏,或者自己写的 python 爆内存,每天永远都是 windowserver 占内存最多,关掉一些窗口会好一点但是只要一开机就一直慢慢往上涨。
    noahhhh
        10
    noahhhh  
       2022-04-07 12:22:50 +08:00 via Android
    @darrh00 用网页试试?
    281x1h2ez12
        11
    281x1h2ez12  
       2022-04-07 12:23:00 +08:00
    所以一堆人建议 32G 内存足够的时候,还是买了 M1 Max 64G 内存,就这样 PyCharm Chrome 开多了还飙到过 33G 。
    minsheng
        12
    minsheng  
       2022-04-07 12:23:59 +08:00
    是时候审视一下是 macOS 没办法摆脱还是 Chrome 没办法摆脱了,出门左转 Ashai Linux ,冲呀!
    sickoo
        13
    sickoo  
    OP
       2022-04-07 12:47:13 +08:00
    @chendy 敌我 windowserver ?


    @darrh00 确实小而美。


    @ruidoBlanco 你可以内存看看
    winddweb
        14
    winddweb  
       2022-04-07 12:50:55 +08:00
    看了下 telegram 用了约 540MB ,加两个 service ,算 600 吧。
    volvo007
        15
    volvo007  
       2022-04-07 12:55:39 +08:00
    我这边最多的是最近不知道哪冒出来的 Safari Networking, 最高有 7G, 感觉是内存泄漏
    discrete
        16
    discrete  
       2022-04-07 13:03:29 +08:00
    我现在内存占用最多的反而是 Logseq……下一台电脑真的 32G 才行了
    sickoo
        17
    sickoo  
    OP
       2022-04-07 13:21:19 +08:00
    @discrete 我的 logseq 没上过榜
    sickoo
        18
    sickoo  
    OP
       2022-04-07 13:27:19 +08:00
    @volvo007 我的内存负载常年在 59% 58%,没开啥应用。中大奖了,又不敢升级 mac os ,这玩意在我手里跟炸弹一样。
    volvo007
        19
    volvo007  
       2022-04-07 13:37:36 +08:00
    @sickoo 我从 Intel 换到 M1 的时候, 系统配置都没有迁移, 只迁移了数据, 开发环境痛定思痛全新配置
    最近还重装了一次 (不影响数据的那种重装)

    这么搞完之后, 外接雷电 dock 从休眠中恢复时候的 panic 问题得到解决
    windows server 高占用解决

    Firefox 和 Safari 泄漏随着版本更新也消失了, 现在就是这个 Safari Networking 碍事

    不行就长痛不如短痛折腾下系统?
    bleutee
        20
    bleutee  
       2022-04-07 13:39:59 +08:00
    WindowServer 其实还好,Chrome tab 多了以后内存泄漏是真烦。
    我自用一半 Safari ,只有工作或者需要特殊插件的时候才用下 Chrome
    p23XnFNH1Wq953rV
        21
    p23XnFNH1Wq953rV  
       2022-04-07 13:45:52 +08:00
    内存黄了也没关系吧,感觉不到卡顿就行
    wolfie
        22
    wolfie  
       2022-04-07 13:50:15 +08:00
    pc 微信竟然才 60MB++
    iyaozhen
        23
    iyaozhen  
       2022-04-07 13:50:19 +08:00
    有事没事 重启下吧

    不要再吹 Mac 不用重启了
    sickoo
        24
    sickoo  
    OP
       2022-04-07 13:51:39 +08:00
    @iyaozhen 隔两天就重启。
    sickoo
        25
    sickoo  
    OP
       2022-04-07 13:52:29 +08:00
    @volvo007 等能鼓足勇气的时候吧。
    leeyuzhe
        26
    leeyuzhe  
       2022-04-07 13:53:58 +08:00
    Google Chrome helper 是啥?
    sickoo
        27
    sickoo  
    OP
       2022-04-07 13:56:23 +08:00
    ![图]( https://raw.githubusercontent.com/googidaddy/img/master/2022/20220407135500.png)
    来张看似没有多少 app 在运行,但实际已经占用 10g.jpg ,我还没开 jb 家的东西,仅仅 toolbox ,vs code 还没开,只配单一作战
    sickoo
        28
    sickoo  
    OP
       2022-04-07 13:57:09 +08:00
    @leeyuzhe 俺也不懂
    LotusChuan
        29
    LotusChuan  
       2022-04-07 14:12:01 +08:00 via iPhone
    你这内存压力看着挺好的,你别看内存占用,苹果计算内存占用的方式很迷惑,占了也不一定在用,有时候多占点反而快,以前用户一直看不懂所以它出了个内存压力,看颜色就完事了。
    wu67
        30
    wu67  
       2022-04-07 14:19:58 +08:00
    其实还算可以了, 缓存占了大多数. 我的 32G, 用了 24G, 缓存是 7 点几, 还有一堆更是内存大户. mumu scrcpy node webpack 钉钉 微信 electron, 抽出 100M 占用的应用里面, 微信只能排到中等...
    Mirage09
        31
    Mirage09  
       2022-04-07 14:24:02 +08:00
    也还好吧,反正 macOS 会 swap 到硬盘上
    我的 iMac 27 LR 日常占用 20G 内存(一共 64G ),swap 经常 10G+,倒不会影响其他 app 使用
    yiplee
        32
    yiplee  
       2022-04-07 15:10:44 +08:00
    telegram 可以用 spa 版本 https://web.telegram.org/k/ ,很好用
    lscexpress
        33
    lscexpress  
       2022-04-07 15:15:54 +08:00
    我现在老版 mbp16g 还够用,等我下次换 m1 的 mbp 一定是 32g 起步
    summersun2021
        34
    summersun2021  
       2022-04-07 15:23:17 +08:00
    mbpmax 顶配 64 ,ps2022 、ghrome 、wechat 、wps 、fcpx 渲染 4k ,40g+内存习惯了。不过暂时还没超 50+,风扇转过 2 次。64 够用,下次升级毫不犹豫选择 128g
    sickoo
        35
    sickoo  
    OP
       2022-04-07 15:25:15 +08:00
    @LotusChuan 好吧。管他呢,用到它爆炸为止吧。
    xtinput
        36
    xtinput  
       2022-04-07 15:39:44 +08:00
    WindowServer 2G+
    xtinput
        37
    xtinput  
       2022-04-07 15:41:11 +08:00
    我惊到了,32G 内存,刚刚看了下,交换内存 2G ···· 不知道啥时候的事情
    xtinput
        38
    xtinput  
       2022-04-07 15:46:27 +08:00
    干掉 WindowServer 进程再登录就变成 400M 的内存了
    Wao
        39
    Wao  
       2022-04-07 16:55:05 +08:00
    @sickoo #28
    @leeyuzhe #26

    估计是 Chrome 的插件
    iyg429
        40
    iyg429  
       2022-04-07 20:56:35 +08:00 via iPhone
    @darrh00 电脑可以缓存到天荒地老
    sickoo
        41
    sickoo  
    OP
       2022-04-07 21:13:09 +08:00
    @Wao 也没啥插件。就普通的翻译之类的工具
    w3cll
        42
    w3cll  
       2022-04-07 21:14:38 +08:00
    所以 WindowServer 是干嘛用得?
    sickoo
        43
    sickoo  
    OP
       2022-04-07 21:26:39 +08:00
    @w3cll google 之后,说是缓冲切换不同程序的重要进程
    txx
        44
    txx  
       2022-04-07 22:01:42 +08:00
    M1 Mini 同时开着 Chrome / VSCode/ Goland / WebStorm / DataGrip / Telegram / Wechat / Excel ,也没感觉有啥问题啊
    wolfmei
        45
    wolfmei  
       2022-04-07 22:36:38 +08:00
    8g 的轻松到怕
    smallthing
        46
    smallthing  
       2022-04-07 22:40:59 +08:00
    WindowServer 这个东西很垃圾的 还说图形化方面超过 win 。呵
    lxiszuhi
        47
    lxiszuhi  
       2022-04-07 22:55:57 +08:00   ❤️ 1
    我以为可以在 M1 上跑 Windows server VM 了。。。。
    wobuhuicode
        48
    wobuhuicode  
       2022-04-07 22:58:05 +08:00
    给你一个方案,Chrome 和 telegram 用平板,通用控制能把鼠标键盘一下子就能切换过去了,图片什么也能拉过去,聊天无压力。就像多了一个独立系统的副屏一样。
    Features
        49
    Features  
       2022-04-07 23:07:08 +08:00
    世界上只有一种焦虑,就是穷焦虑
    这种情况别把 mac 当主力机
    mac 在我这里永远只是一台 xcode 开发机
    rpman
        50
    rpman  
       2022-04-07 23:48:20 +08:00
    @discrete logseq 之前的版本会将所有图载入到内存. nightly 里已经改成只载入打开了的图
    图里的所有 asset 也会载入到内存, 是非常占内存的一个点
    discrete
        51
    discrete  
       2022-04-08 03:36:51 +08:00
    @rpman 可能是我在 Logseq 里打开 PDF 的缘故吧
    Rooney1
        52
    Rooney1  
       2022-04-08 04:21:29 +08:00
    好家伙 把 TG 换 PD 就是我
    dingwen07
        53
    dingwen07  
       2022-04-08 07:14:34 +08:00 via iPhone
    Telegram 要用那个 SwiftUI 的,Telegram Desktop ( Mac 上叫 Lite )有内存泄漏的 bug
    alexcding
        54
    alexcding  
       2022-04-08 08:01:30 +08:00
    我也是, 定了 64GB mac studio
    alexcding
        55
    alexcding  
       2022-04-08 08:05:34 +08:00
    好像 WindowServer 就是管理图形的, 可能吃掉了一部分显卡的内存?
    Active Monitor 观察到的内存占用,好像比第三方的要小很多. 估计是去除 GPU 那块了
    ericguo
        56
    ericguo  
       2022-04-08 08:19:03 +08:00
    @darrh00 可以装 Telegram Lite ,500M 左右的占用,很稳定。
    xman99
        57
    xman99  
       2022-04-08 08:41:53 +08:00
    内存占用不高呀。。。phpstorm 我一次开 3-4 个项目,占用 2g 多呢,你这情况很不错的,不用太忧心的
    Cloutain
        58
    Cloutain  
       2022-04-08 09:12:03 +08:00
    吓死我了 以为是 Windows Server 系统呢
    ShadowPower
        59
    ShadowPower  
       2022-04-08 10:28:43 +08:00
    @LotusChuan 占了也不一定在用,有时候多占点反而快:这说明是内存泄漏了,泄漏的内存程序没法访问到,放进 swap 里都只是单纯地占据硬盘空间,永远不会再次调回内存。
    LotusChuan
        60
    LotusChuan  
       2022-04-08 11:02:54 +08:00 via iPhone
    @ShadowPower
    buffer pool 就是占了内存不用的例子,你说这是内存泄漏?
    ShadowPower
        61
    ShadowPower  
       2022-04-08 11:51:46 +08:00
    @LotusChuan 回收不了,当然是
    ShadowPower
        62
    ShadowPower  
       2022-04-08 11:53:37 +08:00
    @LotusChuan 一方面是做这些事情根本用不着如此多的内存,另一方面是内存不足的情况下它也不能收缩,根本不在程序控制范围内……
    LotusChuan
        63
    LotusChuan  
       2022-04-08 12:31:04 +08:00
    @ShadowPower
    1. 内存申请了不用很正常,其他操作系统像安卓也有空进程,当缓冲用加速的。
    2. 要是给源码那还能看下是不是内存泄漏,然而 macOS 你看不了源码,内存管理逻辑也不清楚,万一它算内存是直接按虚表地址空间大小来的,那显示的内存再大也只能说明虚内存空间大而已,物理内存你又不知道。你有什么证据说它内存没回收吗。
    EvilDevilJin
        64
    EvilDevilJin  
       2022-04-08 12:48:39 +08:00
    亲身体会,macOS 还是得重启的,真的越用越卡,内存占用越用越高。
    我现在一周重启一次。
    docx
        65
    docx  
       2022-04-08 13:02:07 +08:00 via iPhone
    Telegram Web 够用,网页能解决的问题从不装客户端
    ShadowPower
        66
    ShadowPower  
       2022-04-08 14:26:24 +08:00
    @LotusChuan
    1. 那些缓冲加速用的进程,在设计上就给了很低的重要性,内存不足的时候首先会把它们杀掉;
    2. 系统内核里哪里有虚表的概念,那是 C++之类的语言为了实现多态而引入的设计。程序可以向系统申请一定大小的内存,可以是私有的,也可以是共享的(例如多个程序使用了同一个动态链接库)。如果没有 swapfile 这种设计,内存不足时其他程序当然就申请不到内存了。

    当然我知道你想说的第二点是什么,其实这对应 Windows 的“提交大小”。也就是程序向系统申请的内存大小,而不是放在物理内存中的那部分大小。
    但排查有没有发生内存泄漏的时候当然就是关注这个指标(即程序向系统申请的内存大小,而不是实际使用的),毕竟物理内存可能只有 8GB ,但程序却申请了 10GB ,其中一大半在 swapfile 里面。你去查看程序使用的物理内存大小,那永远不可能超过 8GB 。
    这时候还要骗自己“它占的物理内存没有增加,所以没有内存泄漏”吗?

    内存不足的时候,泄漏的这部分内存页面根据最近最少使用机制,当然优先被放进 swapfile 了。而且因为内存泄漏之后,程序逻辑里没办法访问它们,所以它们也没有机会再被放进物理内存中。

    硬盘上多了一段永远不会用到的数据,大多数时候当然不会让系统变卡。当然,新程序启动的时候,或者程序打开一些文件的时候,系统把物理内存中的数据(也包括泄漏的部分)写到硬盘里,这时候会比以往要慢一些。

    但因为大多数时候启动一个程序或者打开一个比较大的文件都得花上不少时间,稍微多个一两百毫秒,用起来根本没什么感觉。所以并不能根据“内存用了这么多还不卡”的主观感受来判断是不是内存泄露。

    至于我有没有证据证明内存没有回收,你可以关注一下硬盘可用空间的大小,硬盘的写入量统计信息,以及为什么这个论坛里不少用户一星期要重启一次电脑。当然也有人不信,觉得 smartctl 的数据是假的。那就没有什么办法了。
    LotusChuan
        67
    LotusChuan  
       2022-04-08 14:56:35 +08:00
    @ShadowPower
    1.我本来就是要是说内存申请不用挺正常,这点你说会在内存不够的时候杀掉,确实,但是前提是内存不够。但是这是建立在内存不够的基础上,在系统觉得内存够的时候它留着也很合理,这时候你外部看着就是没回收,虽然你觉得内存不够了。此外我举这个例子的目的也已经达到了,就是说内存分配了不用很正常。

    2.没,我说的虚表是 Page table ,内核给每个进程分配一个 Page table 我觉得起码是共识,如果一个进程实际使用的物理内存有一块映射到 0 上,另一块映射到 0xFFFFFFFFFFFF(12 个 F),那假设 macOS 一个页占 4k ,它实际上也就占了 8k ,然而如果 macOS 计算内存的方式是计算虚表内存空间的范围,那它算出来就是 2 ^ 36 ,也就是 64g 。

    总之我想说的就是 macOS 内存分配逻辑它没告诉你,源码也没有,那它 swap 想怎么用怎么用,那个活动监视器想说占了多少内存就占了多少,你点个进程进去能看见 4 个内存的数据,从 MB 到 TB 不等。它真分配多少内存,说直接点,就是个黑盒,它就是骗你你也不知道啊。
    ShadowPower
        68
    ShadowPower  
       2022-04-08 16:36:18 +08:00
    @LotusChuan 苹果确实没有什么文档来描述“内存”这一列数值的实际含义,不过,把整个页表的地址范围都显示出来并没有什么实际意义。从用户的角度来讲,用户看到这个数值,点一下排序,就可以知道什么程序占用了比较多的内存。结合用户的需求,就可以知晓,关掉哪个程序能够尽可能地腾出内存空间。

    苹果倒是有一篇文章讲了内存系统的设计,但并没有说明“活动监视器”中“内存”这一列的含义。
    https://developer.apple.com/library/archive/documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html

    这些程序确实是个黑盒,然后还没有相关的资料。但这反而让人感觉更不靠谱了。若你开发的软件真的存在内存泄漏的问题,也许你都没办法意识到这个问题存在。

    然而几年前的 macOS 虽然长时间不重启也会出现一些小毛病,但各种系统进程的内存使用量数值也没有像现在一样夸张。我不敢保证它一定有某种问题,但我不觉得它没什么问题。

    我只想说从“不卡,不影响使用”的角度来证明它没问题,其实不靠谱。真正的内存泄漏,在使用固态硬盘的情况下,还真的可能感觉不到“卡”。

    那种卡顿感更多是机械硬盘带来的,Windows Vista 之后的 Windows 都有一项叫做“Ready Boost”技术,宣传你可以使用一个 U 盘(并没有多高的性能要求,只需要 USB 2.0 ,如今听起来已经有点离谱了)来提升电脑性能。因为 U 盘的随机读写性能好过机械硬盘。
    当你的电脑有 SSD 的时候,这个功能的界面上就会显示,你的电脑已经不需要它了。
    dier
        69
    dier  
       2022-04-08 16:45:06 +08:00
    内存不就是拿来用的吗?如果占用 1% 空闲 99%,那要这么多内存空间有啥意义
    LotusChuan
        70
    LotusChuan  
       2022-04-08 17:02:49 +08:00 via iPhone
    @ShadowPower
    苹果确实做了起码是类似于虚内存空间范围当内存的事情,你可以看一下进程数据,四个数据里面有一个明显很大,超过了物理内存和 swap 的总和,所以它到底怎么算内存还是不清楚。

    到这里我说的一切你都没否认了,因为我本来就想说内存管理逻辑不清楚,所以看内存压力就行了。至于你提出的有没有内存泄漏,电脑卡是什么原因,你说这么多和我的观点也没什么交集,我不关心。就这样吧,别浪费时间了。
    lutla
        71
    lutla  
       2022-04-08 17:13:31 +08:00
    年经话题,建议焦虑症患者多焦虑一下自己的钱包房子车子
    ShadowPower
        72
    ShadowPower  
       2022-04-08 17:18:06 +08:00
    @LotusChuan 我没有找到“超过了物理内存和 swap 的总和”的那一项。未分配的内存本来就不应该列出来。
    如果你是指 kernel_task 的“实际内存(Real Mem)”很大的话,那是因为虚拟内存本身就是建立在这上面的,当然会显得很大。
    我并不觉得是“显示有问题,实际没有问题”。只不过我只能从其他现象推测出可能存在内存泄漏问题,而不能向你保证它一定是这个问题。
    binge921
        73
    binge921  
       2022-04-08 17:18:44 +08:00
    要是工具能帮你赚钱 还是 64 玩的舒服
    ShadowPower
        74
    ShadowPower  
       2022-04-08 17:21:43 +08:00
    @LotusChuan 我想到了一点,如果你看到一个进程的内存占用超过了系统的物理内存+交换的大小。那是因为还有“内存压缩”这一项,它算进了物理内存的大小里,而且是压缩之后的大小。
    但进程的内存显示的是这部分数据解压缩之后的大小。
    chenzheyu
        75
    chenzheyu  
       2022-04-08 17:56:54 +08:00
    WindowService 常年没超过 2g ,一般都是 1.5 到 1.7 之间飘
    LotusChuan
        76
    LotusChuan  
       2022-04-08 18:20:27 +08:00
    @ShadowPower
    我现在 Activity Monitor 点进去 WindowServer ,Memory 下有四个 Size ,其中第二个 Virtual Memory Size 大小是 40G ,然而我现在用的笔记本 Physical Memory 只有 16G ,加上 Swap 也就 17G ,所以很明显它用了 Virtual Address Range 来计算 Memory ,而这个得出的最多只是 Virtual Memory Range ,这还只是建立在它纯粹用 Virtual Address Range 来计算的基础上,因为我不知道它内存算法是什么,所以这也不一定是纯粹的 Virtual Memory Range 。更不用说其他的三个数据了,完全就是黑盒,四个数据没有一个是等于 Activity Monitor 里面显示的 WindowServer 的内存。所以你说我能靠 Activity Monitor 显示的“内存”知道这个应用到底用了多少内存吗?真别纠结了,看下内存压力就得了。

    最后,我的观点已经全部证明过了,你说的内存泄漏 blabla 的我真不关心,真别浪费时间了。
    jellyspot
        77
    jellyspot  
       2022-04-08 22:33:00 +08:00
    内存不就是拿来用的吗?难道是拿来看的?
    JackyCDK
        78
    JackyCDK  
       2022-04-09 00:29:44 +08:00
    买了 32G 回来开 pd 反正一直都是在 80%占用左右就再也没涨上去了,内存这玩意不就是拿来用的吗
    kaz10025
        79
    kaz10025  
       2022-04-09 11:01:35 +08:00
    关闭 promotion 你会发现新世界
    MsHan
        80
    MsHan  
       2022-04-09 22:40:26 +08:00
    Google Chrome helper -- 这个是真流氓啊,我刚看了下列表里有一堆这个名字

    telegram 和 微信占用差不多,都是两三百 MB
    sickoo
        81
    sickoo  
    OP
       2022-04-11 21:45:14 +08:00
    这个 helper 很棒,挂着两个油管页面外加一个 b 站,已经达到了 1.5G ,鼠标卡顿漂移了。
    GTX01
        82
    GTX01  
       2022-06-27 21:07:27 +08:00
    刚开了三个网页,Safari network 这个进程一下就占了 7 个 g 的内存。。
    chengYT
        83
    chengYT  
       2022-09-10 13:00:18 +08:00
    @darrh00 telegram 有内存泄露的 bug ,你挂在后台什么都不干内存都蹭蹭往上涨,最多吃过我四十多 G
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   848 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 111ms · UTC 21:00 · PVG 05:00 · LAX 13:00 · JFK 16:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.