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

求助: windows 超大虚拟内存(swap) 泄漏?

  •  1
     
  •   wisej · 27 天前 · 1976 次点击

    提交了大量的内存请求 51G 。根据图 1 可知,ram 用了 28G,剩下 23G 正好和虚拟内存已分配数值匹配上。

    根据网上信息,我在 C 盘根目录还找不到 pagefile.sys 文件(已打开隐藏项目显示),并且按内存排序占用最多的也就是 chrome 2G 的样子。我大概看了下,所有的内存占用加起来感觉还没有 28G ,不知道虚拟内存这 23G 哪来的(而且任务管理器也不显示?)

    这占的 23G swap 导致 C 盘空间不足 10g ,导致我休眠后会重新开机(休眠失败)---内存的 28g 写入不下了。

    我的问题: 1.为什么这 swap file C 盘找不到,如何安全删除?

    2.这么大的内存申请(malloc)为什么任务管理器看不到,只有真的使用(memset)才会标识占用?

    Ref: https://github.com/cw1997/memory-allocation-test

    图 1

    图 2

    第 1 条附言  ·  27 天前
    重启后内存指标都恢复正常了... 似乎是一个"内存泄漏“的表现
    18 条回复    2024-11-30 22:14:21 +08:00
    wisej
        1
    wisej  
    OP
       27 天前
    我把几乎所有看得见的程序都退出,内存占用最多的只有几百 M 的情况下:内存使用中仍然显示有 23G. ..
    yinmin
        2
    yinmin  
       27 天前 via iPhone
    输入命令:dir c:\ /a
    by
        3
    by  
       27 天前
    除了要显示隐藏文件,还要取消勾选“隐藏受保护的系统文件”,才能看见 pagefile.sys 。系统时好像是删不掉。

    取消自动管理,自己设置大小,重启
    yinmin
        4
    yinmin  
       27 天前 via iPhone
    你有没有用 WSL ? 或者 hyper-v ? 修改配置限制 WSL 的最大内存,否则 WSL 有可能会占满你的所有内存
    Plutooo
        5
    Plutooo  
       27 天前
    开始-资源监视器-内存-提交,看看是哪个进程的问题吧
    MossFox
        6
    MossFox  
       27 天前
    我遇到过一例是英特尔某个服务的进程刷了几万个死掉的 pid 在那边,任务管理器里面看不到。
    RAMMap 里面才能见到。RAMMap → Processes 看一下有没有同名进程对应巨多 pid 的情况。如果看到了恭喜你就找到罪魁祸首了。
    wisej
        7
    wisej  
    OP
       27 天前
    @by 感谢,取消勾选后能看见了。
    @yinmin 虚拟化是启用的,但是 windows 功能里 Hyper-V 没有勾选。我印象里最近也没启用过 WSL
    qbqbqbqb
        8
    qbqbqbqb  
       27 天前   ❤️ 1
    Windows 任务管理器里的“内存”实际上是常驻集大小( RSS )的意思。当然不包括只申请未使用,或者被交换出的部分了。

    要看这些的话需要看“详细信息”tab 里的“提交大小”这一列(默认隐藏,需要右键表头配置之后才能看)
    wisej
        9
    wisej  
    OP
       27 天前
    @Plutooo 最大的 MsMpEng.exe 456,916KB. 看不出问题所在
    wisej
        10
    wisej  
    OP
       27 天前
    @MossFox 看了下 chrome.exe 很多,并且今天某个网页确实崩溃出现过 out of memory
    wisej
        11
    wisej  
    OP
       27 天前
    @MossFox 我疑惑的是,process 已经死掉内存不是会被回收么?
    V28a19cc
        12
    V28a19cc  
       27 天前   ❤️ 1
    @wisej #11 正常情况下是这样,但总会有不正常的情况,这种就被称为 Zombie process
    ysc3839
        13
    ysc3839  
       27 天前 via Android
    “已提交”就是。
    Windows 支持预分配内存,不使用就不会占用物理内存,但是预分配这部分必须要有预留的虚拟内存。
    也就是说只要程序申请成功了,要用的时候肯定有空间给它用,不至于崩溃。如果虚拟内存也不足,那申请时就会失败。
    wangxin3
        14
    wangxin3  
       27 天前

    我也前几天也遇到了,也是将近占了 20G ,网上查了查资料关闭了这个,最近几天没复现。
    v2tudnew
        15
    v2tudnew  
       27 天前
    Windows 的内存显示是挺迷幻的
    进程标签页显示进程 540MB ,给它改成百分比就变成 6.8%( 32GB )

    关闭就在你这截图里面,去掉勾选自动管理,并确保每个盘没有勾上(不建议这么干),然后重启释放
    cjq8z
        16
    cjq8z  
       27 天前   ❤️ 1
    可能是驱动干的事情,以前碰到了 killer 网卡有内存泄漏问题,在高速下载的时候,内存泄漏不停的增加,直到消耗完我 32GB 的内存。后续更新网卡驱动后,内存泄漏问题解决了。
    greygoo
        17
    greygoo  
       27 天前   ❤️ 2
    建议用 procexp.exe 看,那个也是微软的但是更好用,要去下载。
    billccn
        18
    billccn  
       26 天前
    @cjq8z 不是驱动,你看楼主任务管理器截图底下两个"缓冲池"(非常糟糕的翻译)就是指的内核使用的内存,加在一起也不到 3GB 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5665 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 06:30 · PVG 14:30 · LAX 22:30 · JFK 01:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.