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

已提交内存会慢慢涨,一结束掉 ctfmon.exe 就会猛降

  •  
  •   acess · 2018-01-15 01:37:12 +08:00 · 5171 次点击
    这是一个创建于 2509 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一直用的 Win10 自带输入法。
    已保存 ctfmon.exe 进程被我杀掉前的 VMMap 记录和 Full dump,有需要的也许我可以邮件发过去……
    装了火绒和 QQ,不知道有没有影响。
    第 1 条附言  ·  2018-01-15 06:31:57 +08:00
    已经卸载火绒,又进安全模式试了一下,依然如故。
    VMMap 打开 ctfmon.exe 和用来测试的 notepad.exe ,发现有比较大的 Unusable Size,两个进程的这项数值加起来似乎就是被神秘侵占的 system commit。
    27 条回复    2018-01-26 22:33:30 +08:00
    Tink
        1
    Tink  
       2018-01-15 02:21:00 +08:00 via iPhone
    虽然我能猜出来你想表达什么,但是你的描述真的让我没有试图解答的欲望
    xupefei
        2
    xupefei  
       2018-01-15 02:29:49 +08:00
    把任务列表里内存相关的那几个,和缺页那一项选上观察一下。
    acess
        3
    acess  
    OP
       2018-01-15 03:02:44 +08:00
    @Tink 不知道您猜出来了什么呢?因为我之前就发过这个帖子: https://www.v2ex.com/t/411473,所以,觉得我要把锅甩给 Win10 ?
    我真心不知道出现这个问题的原因,网上似乎也搜不到别人有碰到类似的现象。
    也许我这只是个例而已,确实没有必要追查吧……

    @xupefei 是不是要用性能监视器?
    这个问题似乎还不好重现,得等一段时间……


    如果各位想重复实验(最好用虚拟机),也许可以用 AutoHotKey 脚本试试,比如这个:
    Loop,
    {
    IfWinActive, 无标题 - 记事本
    {
    Send, sssssssss{SPACE}
    Sleep, 200
    Send, {CTRLDOWN}a{CTRLUP}
    }
    Sleep, 100
    }
    打开任务管理器 /性能监视器 /Procexp,跑一段时间 AHK 脚本,然后杀掉 ctfmon.exe ,看看是不是有类似的现象。
    xupefei
        4
    xupefei  
       2018-01-15 04:02:06 +08:00
    我试了一试,ctfmon 的 commited size 并没有上涨,倒是 dwm 的涨了。停了一会儿自己降下来了。
    acess
        5
    acess  
    OP
       2018-01-15 04:31:09 +08:00
    @xupefei 我试的结果是这样的(当然,用 Win10 自带微软拼音,我也没装其他输入法):ctfmon.exe 自己的 commit size 没涨,但是 system commit 是慢慢地涨,然后,一杀掉 ctfmon.exe ,system commit 就瞬间降回去了。
    xupefei
        6
    xupefei  
       2018-01-15 05:10:51 +08:00
    嗯,我这边也是。但是 system commit 涨的不多,测试了 15min,它涨了大概 0.2GB 。还不如 Chrome 的零头。
    我估计这里是把没被系统清除掉的旧虚拟内存分页也算上了。毕竟随时清理虚拟内存的话会对硬盘造成负担。
    acess
        7
    acess  
    OP
       2018-01-15 06:30:50 +08:00
    @xupefei 你可以试试把 s 加多,多等一会。
    神奇的地方有两点:任务管理器看不出异常;一干掉 ctfmon.exe (关掉用来测试的记事本好像也有效果),system commit 就骤降。
    xupefei
        8
    xupefei  
       2018-01-15 06:43:44 +08:00 via Android
    @acess 所以我说那里是把未回收的分页也算上了啊。未回收的分页不属于任何进程,所以进程里体现不出来。

    结束进程是个执行清理的触发器。如果我猜的没错的话,你结束其它进程应该也有这个效果。
    acess
        9
    acess  
    OP
       2018-01-15 07:10:10 +08:00
    @xupefei 试了,就拿 AutoHotKey.exe 开刀,没反应。还是干掉 ctfmon.exe 立竿见影。
    ragnaroks
        10
    ragnaroks  
       2018-01-15 08:39:04 +08:00
    16299.125 未能重现,不过我这里 ctfmon.exe 平常占用也不少,我笔记本只有 3M 多,到 PC 上就 20 多 M
    zk8802
        11
    zk8802  
       2018-01-15 10:01:35 +08:00   ❤️ 1
    “已提交内存”会涨到多少? Unusable virtual memory size 又是多少?听上去好像是因为内存泄漏(提交内存大小不减少) + 堆内存碎片(大量的 unusable virtual memory )。建议用 WinDbg 调试 ctfmon.exe ,在虚拟内存分配函数( VirtualAlloc*)上下个断点,看看调用栈都有哪些。

    Unusable virtual memory: http://blogs.microsoft.co.il/sasha/2014/07/22/tracking-unusable-virtual-memory-vmmap/
    acess
        12
    acess  
    OP
       2018-01-15 11:45:05 +08:00
    @ragnaroks 你跑了多久?也许可以试试多加几个 s,跑个 20 分钟应该就可以看出来效果了—— ctfmon.exe 在任务管理器里的提交大小看上去并没有那么大,这个才是神奇的地方。
    我是 16299.192 。
    当然,也可能是我机器上有什么奇怪的东西吧……
    acess
        13
    acess  
    OP
       2018-01-15 11:51:48 +08:00
    @ragnaroks 还有,几年前就有人吐槽微软拼音输入法占内存,我用的是自带微软拼音测试的,说不定别的输入法就没这个问题。
    ragnaroks
        14
    ragnaroks  
       2018-01-15 11:52:27 +08:00
    @acess 几分钟,在资源监视器的 CPU 栏目里面看看加载项(dll),我这边全是系统加载项,也许你的有第三方的?
    acess
        15
    acess  
    OP
       2018-01-15 13:09:39 +08:00
    @ragnaroks 试试多加几个 s,多跑一会,我这效果就蛮明显的。
    换了另一台电脑,也是 Win10 1709,可以复现。
    acess
        16
    acess  
    OP
       2018-01-15 13:10:56 +08:00
    @zk8802 可以涨到超过 2GB。
    WinDbg 调试还是太专业了,我只是外行……而且 VirtualAlloc 大概会被非常频繁地调用吧。
    acess
        17
    acess  
    OP
       2018-01-15 13:14:33 +08:00
    @zk8802 哦,是条件断点么……
    我有空再看看。
    h4lbhg1G
        18
    h4lbhg1G  
       2018-01-25 15:47:24 +08:00
    System Commit 是说那个 4 号进程的 Commit Size 么?我这里是 2G 多。杀掉 ctfmon 似乎也没变化。不过这几天,开机搜狗输入法会让第一次输入的程序自己关闭掉,导致我一个月的 chrome 打开标签丢了。
    acess
        19
    acess  
    OP
       2018-01-25 19:14:28 +08:00 via Android
    @h4lbhg1G 就是点开 Procexp 工具栏上的统计图表,显示的整个系统的 System Commit。
    拿身边另一台 Win10 1709 的电脑试了,也有类似现象。我觉得这很可能真的是 Win10 自带微软拼音的锅……
    acess
        20
    acess  
    OP
       2018-01-25 19:15:23 +08:00 via Android
    @h4lbhg1G 这个值应该就是任务管理器内存使用量上的“已提交”
    h4lbhg1G
        21
    h4lbhg1G  
       2018-01-25 20:35:12 +08:00
    @acess 刚刚发现 4 号进程 commit size 变成 20M 了,我这边是关掉 chrome 等后悔下降,但也不是马上,不知道怎么下降的。今天太冷了,明天虚拟机探索下。
    h4lbhg1G
        22
    h4lbhg1G  
       2018-01-25 20:40:06 +08:00
    @acess Committed Cached 17.1/24.2 GB 5.8GB 是说整个 OS 的吗?
    acess
        23
    acess  
    OP
       2018-01-25 20:48:38 +08:00
    @h4lbhg1G
    嗯。
    我不是给了个 AHK 脚本么?开个记事本,把输入法调到微软拼音,让脚本自动刷,就可以看到已提交内存在以肉眼可见的速度上涨了……一般跑个 20 分钟就挺明显了(可以让脚本多打几个 s,这样似乎涨得更快)。
    我这是 16299.192
    h4lbhg1G
        24
    h4lbhg1G  
       2018-01-25 20:57:39 +08:00
    @acess 我是身边的是 17074.1000 以及 16299.192. 那样的话记事本关掉呢?只有中文输入有么?日语如何?会不会是某种延迟释放?
    h4lbhg1G
        25
    h4lbhg1G  
       2018-01-26 12:34:46 +08:00
    @acess 跑了 5 分钟,中途没有见到 Commit 增加(2 秒的刷新频率),倒是因为我后台在升级 17083 中途从 12.1GB 下降到了 10.1GB 了,系统升级好后我虚拟机再复现看看。
    顺便问下,会不会是 Heisenbug,如果什么都不开,甚至连任务管理器 /PE 都不打开,直接跑 20 分钟,然后再杀 cftmon 也是这样么?
    你的 Commit Size 增加是表现在 ctfmon 上么? 我的是这样 https://i.loli.net/2018/01/26/5a6aafc6675b8.png
    然后我觉得这样刷,是对微软云输入法的一种关键词攻击啊,把网络断掉再刷。
    h4lbhg1G
        26
    h4lbhg1G  
       2018-01-26 13:37:53 +08:00   ❤️ 1
    @acess 在 16299.192 上复现成功,1G 多,小狼毫输入法确实就没有这个现象。在删除那行文字的瞬间,内存就减少了,输入过程中增加,微软拼音一直在增加。

    接下来我来调试下试试,cftmon 还好是当前用户执行的。
    h4lbhg1G
        27
    h4lbhg1G  
       2018-01-26 22:33:30 +08:00   ❤️ 1
    我测试发现,写字板与记事本都是一样的效果。日语输入法也是这样,暂时还没测试英文输入法。虚拟机里面我没装 Office 没有 cftmon.exe 结果发现 ChsIME.exe 这个也是一样的。如图 https://i.loli.net/2018/01/26/5a6b3af5e26cc.png

    现在在想如何才能用 Windows API 写一个程序可以达到这样的效果,也就是在 VMMap 里面出现几百兆到 1 吉的 Unusable

    另外我发现一个细节,Unusable 即使超过 1GB,里面详情显示它全部是由是 40K 60k 等几个有限的碎片组成。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3378 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:34 · PVG 19:34 · LAX 03:34 · JFK 06:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.