我真的怀疑有没有什么病毒隐藏了进程信息, 我电脑 24G 内存,动不动就炸,已提交内存总在 22G 以上,尤其最近关闭了虚拟内存,实在是公司电脑硬盘太拉胯,一直用虚拟内存就一直卡,关了虚拟内存就反复炸内存, 任务管理器里永远找不到内存占用高的,虚拟机和 wsl 也没在用,难道真的这几十一两百兆能吃满 24G ?

android java 编译进程总是崩溃,我都要崩溃了,

刚知道任务管理器详细信息有个“提交大小”默认隐藏的, 打开后能看到一些偷内存的,
rammap 看看但是这事真的很难查我这边不仅内存缓慢爆炸,显存也会,我怀疑 Windows 在背着我打游戏

加内存

看看性能那里,“已提交”是虚拟内存,看看“使用中”多少,这个是物理的内存

内存 32.0 GB 速度: 4800 MHz 已使用的插槽: 2/2 外形规格: SODIMM 为硬件保留的内存: 276 MB 可用 19.9 GB 已缓存 19.3 GB 已提交 16.1/51.7 GB 分页缓冲池 1.4 GB 非分页缓冲池 1017 MB 使用中(已压缩) 11.6 GB (1.1 GB)就开了个 VSCODE ,一个微信,一个 QQ 。

低端 PC 主板电气性能不佳,并且没配备 ECC/RECC 的时候,因为内存错位导致内存堆积、可用容量越来越小的情况很常见。尤其是早年板载内存的笔记本平台,以及只插了单条内存的电脑,我曾经用过一台低配的机器,开机什么都不干睡一晚上起来内存就爆满,所有进程崩溃。解决方法是,加多几条内存,虽然没有实际有效的证据,但是在我的使用经验中多通道会显著降低内存错误和内存堆积的发生概率

image.png32G

用 tasklist 可以看个大概,导入到 excel 里,我这里还挺准的。

#3 问题我已经关了虚拟内存,这个“使用中”总是比“已提交”要低了几个 G ,“已提交”总是快爆满状态,这时候我的 java 编译进程就会崩溃,但“使用中”还有剩几 G ,

#2 我都想自己组一台电脑带公司来了,公司电脑实际是最大 8G 内存,已经有 16G 是我自己自费加的了,

用 sysinternals 的 rammap 看看谁占着的

大概率是浏览器吃掉了,前几天我也专门分析了一下内存情况。你要看 工作集内存,工作集内存 = 使用中内存,性能 - 资源监视器里面有明细。需要更详细的数据可以使用微软的 ProcessExplorer 各字段官方解释:提交:操作系统为进程保存的虚拟内存量;工作集:进程当前正在使用的物理内存量;可共享:进程当前使用的可与其他进程共享的物理内存量;专用:进程当前使用的不能被其他进程共享的物理内存量;工作集 = 可共享 + 专用

提交内存是应用程序申请的内存,提交满了内存就是满了,一般浏览器占用多。虚拟内存放固态盘一般也不会卡的

总感觉,Win10+ 有内存泄漏。。表现为,用了几天后,关闭所有程序,但系统还会吃很多内存。。(比如一半以上。。)Win7 、XP ,好像没有这种现象。。

加到 64GB. 节省时间精力,避免内存不足恐惧症。我加到 32GB 之后都没怎么看过内存了

我 32 都不够用,等 618 上 64 了

#12 公司的 西数 sata ssd 绿盘 感觉不是一般的拉胯, 用几年了,似乎越来越拉胯了, 一旦动到虚拟内存就整个电脑卡住什么都做不了,

系统重装

win 别彻底关虚拟内存,会让你物理内存无法全用。不用的话留一个推荐大小

内存泄漏,重启缓解

#18 言之有理,我关闭虚拟内存几个月了,算是看明白了,已提交的总会有一大堆是没用的,实际使用总会小于已提交,那么允许提交上限就得超过真实内存,只能开虚拟内存了,

日常开机 25gb 一个 vs 一个 idea 还有 docker 但是 docker 只跑了几个 redis 实际上不需要担心内存 如果实在是强迫症可以 memreduct 这个软件清理下

电脑还好,各种任务管理器可以查。手机才是乱…

编译安卓试试用 jdk21 ?设置 studio_jdk 和 gradio_jdk 环境变量,再修改 vmoptions 和 gradle.properties ,使用分代 zgc我现在是这样的,但是没有去测试到底内存有没有少

我用 16G 内存的时候总是占 70%以上,现在用 32G 内存的,还是 70%以上,我也很无奈..

没事清理一下,推荐 RamMap64.exe

cpu 也很重要,公司 i7-12700+16 比自己 i5-12+32 起项目快了两倍,而且流畅

#26 我是 i5 8400 , 五年前还是不错的, 没想到五年后还是公司最高配的 cpu,

神奇 今天摸鱼也在研究这个问题 来了就看到了

我的小工具,10k ,只是点击按钮的时候有一点点计算然后马上完成了,也不调用啥,其他都是闲置的没有任何动作,现在是闲置中的,居然占用是内存是 1.5MB ,已提交 30MB ?有点夸张了。

因为不能关虚拟内存。虚拟内存请放在 c 盘固态上。虚拟内存设置系统管理的大小。别看那些瞎几把优化的文章。

大概率 java 语法分析占用了

Java 用太多内存了?看能不能加个参数限制一下最大内存?

近任务管理器看看。如果找不到是谁占的内存,八成就是驱动/驱动级的程序有泄露。这时候就需要用 PoolMon 看。

说一个我之前遇到的吧,vscode 的 ssh remote 巨吃内存,开一个项目七八 G ,不用 remote 就没这个问题

那个是泄漏了吧,我记得有这么回事。但应该修复了

浏览器内存 尤其是基于 electron 的那一堆 动不动来个内存泄漏

跟我一样。我日常使用的就是 idea 、webstorm 、VMware 外加浏览器之类的用着用着 95%以上的占用,虚拟内存也快满了然后我把所有的软件关掉,占用还是 50%(我 32G 内存)我怀疑是内存泄漏,我今天查了半天。发现可能是一个 cckT 开头的驱动导致的。但是目前还没找到具体是哪个驱动

今天才 debug 了一遍了,什么 rammap ps info 都用了一遍,没啥用。全部软件都关闭了都还有 10G commit 的内存。explorer.exe 都 kill 了一遍再重启,少了几 G ,但是还是这么多。

哈哈哈哈,背着你打游戏。😂

win 是这样的,你有多少内存都会帮你使用上的。内存少,就给你虚化高一点,内存大,虚化就少一点。

内存这块,最清晰的是 Linux ,其他的都看不懂,Mac 更是垃圾

虚拟内存不能关

8400 啊,d4 条子一堆便宜货你多整几个不就完事了

jvm 占的,有多少吃多少

我这个电脑 16G 更痛苦, 我开电脑 6G, 刚开个 Chrome 占 4.5G(我 pin 了大概 15 个标签是没做完, 没看完的东西还有些常用网站 然后开个 VS Code+前端开发服务器 3G, 然后我 Chrome 开多点标签然后再开个 VScode 就要崩溃了 只能过几天加个内存; 但是很奇怪的是我另一台电脑感觉就不会占这么多内存

我这虚拟机( hyperv )有内存泄漏,任务管理器上显示一个 G ,实际会用 3 40G 。重启 hyperv 就释放了

Chrome 换成 Firefox 试试

#8 这点内存还敢关分页文件,我实在是难以评价,我 64G 都不敢关
帮你省钱,chrome 的锅,加内存没用
firefox 以前还可以,现在一个球样

我 16g ,一直不关机一个月也没有问题,但是一个月后关闭所有程序,会发现内存占用很高,应该就是内存泄漏了。但是这个时候我疯狂开网页,又不会卡和崩溃,就很神奇,win10ltsc

我 16G 都敢关。OOM 崩溃了就重启.jpg

感觉 2021 以后的 JetBrains 系 IDE 都非常吃内存,稍微大一点的项目仅 IDE 本身就可以用 5GB ,超大项目+装了很多插件往往都要 10GB 以上了。里面还塞了一个 Chromium ,现在有些插件可以用 Web 技术来做界面了。想起当年用 2017 版的时候,如果用 idea.exe 而不是 idea64.exe (用 32 位 JRE ),打开项目只需要 500~700MB 内存,只有 4~8GB 内存的电脑也能凑合用。如果用 32 位 JDK 跑项目那就更省了。2019 之后大概需要 2GB 了。之前装了个 Codeium 插件,自带一个 lsp server ,我发现只要项目够大,它的独立进程都可以吃 2GB 内存。还有大型 Rust 项目,不用 JetBrains ,但是用 rust-analyzer ,打开一个源码,仅 rust-analyzer 本身就用 1.5GB 。对了,我的 CPU 有 16 线程,因此有些工具为了充分利用 CPU 性能,开 16 个独立线程/进程跑不同任务。内存需求也是成倍上升……我觉得,如今要想用得舒服至少要 32GB ,要想 99.9%的时间都忘记内存容量有限制则需要 64GB~128GB 。把开发工具降级回远古版本就很省内存了,只是用起来感觉效率低了不少。

提交大小「偷」的是你的虚拟内存。系统默认开着虚拟内存,他用虚拟内存,当然不需要你去关心使用量。你现在把虚拟内存关掉了,当然会出问题了。Windows 内核是禁止超量申请内存的,一个进程申请 4G 多,你要么给 4G 物理内存,要么给 4G 虚拟内存。Java 是出了名的吃内存,32 位的时候就一个进程吃 2G 了,64 位能吃更多。都那么多年了不会还有人不知道吧。

程序要跑起来,你总得给他个地方跑,开虚拟内存,那就是把多余的内存分页扔进硬盘里,虽然慢点,但至少还能跑。关了虚拟内存,程序连跑的地方都没有了。要做 Java 我觉得 32G 是起步。我司的笔记本板载 8G ,插槽我换了一根 32 的,40G 算是差强人意,有条件的话还是上 64 比较好一些。我自己的开发机笔记本就是 32+32 了。

稍微了解一下操作系统原理吧,避免几个误区:1. 「已提交」和内存占用没有半毛钱关系,也不是程序「恶意偷内存」。哪怕你的已提交显示 1 TB ,物理内存只有 8 GB ,也完全不能代表你的电脑内存满了或者没满。「已提交」的唯一意义是告诉你「所有应用宣告申请了这么多内存」,但「申请」不等于「用」:很多使用自己的用户空间内存分配器的程序会直接从系统那里「申请」过来一大把内存(甚至比实际物理内存还大),然后慢慢用。真正的内存占用是指程序「用」的部分。这部分你应该通过 Resident Set 或 Working Set 来估算;2. 虚拟内存是 Windows 滥用的错误术语之一。虚拟内存本身是操作系统的基本概念,指为每个进程都需要分配一个独立的地址空间,这个地址空间映射到物理内存页面中。你说的这项能关掉的功能应该是指交换空间 / 分页文件( Swap )。2. 交换空间关掉并不能让系统在高负载下变快。相反,我不推荐在任何场景下关掉。它的目的是为了让匿名页面和文件后备页面具有同等的交换地位,都能够在内存不足时释放。关掉后,只有后者能释放,所以等于是在高负载下系统能强制释放内存的手段变少了一个,只会让系统更不稳定。

win7 也有,同一个系统 iso ,一台本子重装了 win7 后有内存泄漏什么都不开内存占用会越来越多,另外一台就是完全正常的,怀疑和 NVIDIA 或者其它什么驱动有关。

#57 我的只会发生在 长时间的待机/休眠 后每次电脑休眠再唤醒后, 已提交就多几个 G, 每次都是

开虚拟内存,这个不能关,具体原因自己百度,换 ssd ,加内存条,

java + chromium = 内存黑洞

内存有 overcommit 的概念。就是说当程序申请内存时,这部分内存大小是算作“已提交”的,但程序可能只用到了部分内存。比如 void buf = malloc(100 1024 1024); 这算做"已提交" 100MB ,这时是不消耗物理内存的。但是 memset(buf, 0, 20 1024 * 1024); 操作就是 "使用中" 20MB ,这时系统才会实际分配物理内存。如果 "已提交" 的大小超过物理内存大小这就是 overcommit 。Linux 允许 overcommit ,毕竟 commit 不是真实使用,所以提交再多也无所谓,但一旦访问超出可用内存,就会开始杀进程。所以 Linux 下编程习惯是可以尽量申请更多内存,但只要访问部分足够小就行。但 Windows 一般是不允许 overcommit 的,也就是只要超过可用内存,提交时就会直接失败。这时如果开启页面文件,系统会优先把那些已提交但未使用的内存交换到磁盘,但由于未使用所以并不会发生 IO 。你如果听信那些莫名其妙的优化建议,把页面文件关掉,那么由于"使用中" 内存肯定小于 "已提交" 内存,那你的物理内存肯定会无法利用满。

24g 不够用太正常了,我之前 32G 都动不动满内存,现在换到 64G(花了 1 千不到),终于解决了内存焦虑,开发也更顺畅了。建议花点钱直接拉满,吃饭的东西没必要省,你查来查去会发现,内存它就是要用这么多

无论是开不开页交换,已提交内存也是有上限的。到达上限后,即便物理内存还有很多剩余,应用程序也无法申请新的物理内存。关闭 pagefile 当然可以提高性能,可以减少大量的磁盘读写,延长磁盘的寿命。只不过某些应用对已提交内存占用的优化不够,造成实际物理内存占用不高,但已提交内存占用很高。开了 pagefile 后,只是推迟了已提交内存被占满的情况。只要开启更多类似的大型应用,已提交内存同样会被占满。根源是在应用程序自身。

#61 唯一正解,Windows 发生 overcommit 的时候具体也不是交换到磁盘,而是单纯保留一部分 SWAP 磁盘空间,实际上是没有额外性能开销的

都用上 android studio 了, 就给 8G 的内存的机器啊。。。你让老板在你的机器上开发试试

楼上关于 Overcommit 的问题解释得很清楚了。我可以再总结一下:1. 「关闭 pagefile 当然可以提高性能」:关闭 pagefile 和性能无关,只是影响你提交总量的多少;2. 「某些应用对已提交内存占用的优化不够,造成实际物理内存占用不高」:正是因为应用会提交更多内存(有的是因为沿袭了 Linux 的习惯,有的纯粹是在设计上难以解决),所以开启 pagefile 才是必须的。否则由于 Windows 的特性,你将连本来的物理内存都不能完全利用;3. 「可以减少大量的磁盘读写,延长磁盘的寿命」:一方面,Windows 在交换方面已经很保守了;另一方面,如果出现「大量的磁盘读写」情况,说明平时的工作负载(注意!这里说的是实际的内存使用。仅仅提交很多内存而不使用,并不会产生任何磁盘读写。参考楼上)对内存来说已经不堪重负了,那么升级内存是最佳解决办法,而 pagefile 也能作为一种后备资源来在瞬时高负载时分担一下。关掉 pagefile 属于纯纯的掩耳盗铃、自欺欺人,其结果是工作负载运行不起来了。而且由于第 2 点,就连原本的物理内存都无法完全利用了,百害而无一利。

那个年代,虽然生活没有那么丰富多彩,但是简单。

这个可以点击那个资源监视器查看得.

我遇到过的是 esxi 直通显卡给 debian10 ,内存会一点点上涨直至爆了,所以如果全关了内存还在上涨,有可能是某个驱动或程序导致的内存泄漏

16G 开机占 6G 不合理的,可能自启太多了,正常 20 ~ 25%左右

github.com/henrypp/memreduct

谢谢哈, 让我一下回到 20 年前

虚拟机关了就行,虚拟机占用的内存有些不会表现在详细信息里

我最近也在看这个,莫名奇妙 90% 以上了已经发现了一个问题就是 docker desktop 会占用 14%左右,但是任务管理器上面看不懂 s21.ax1x.com/2024/04/17/pFxqrIs.png

Jetbrains 家跟浏览器吧 20G 内存的 Linux Laptop 都经常进 swap (当然是 goland 之类玩意跟 chrome 一起开的

#74 看不懂 打错了,是 看不到

64g 以下不要关闭页面文件,宝贝

8G ram 关虚拟内存的路过

我理解系统因为 swap 而出现大量磁盘读写的情况大概率是抖动[thrashing],这时因为频繁的 page fault 占用了大量 CPU cycle 导致 os 的响应速度慢了成千上万倍,ram 的频繁读写还没持续多久,用户自己就先受不了了

如果 Windows 不允许 over commit 的话就没 thrashing 什么事了

浏览器一个页面就 200M.....

#79 事实上关闭 swap 也不能完全防止 thrashing 问题。就像前面说的,swap 的目的是「让匿名页面和文件后备页面具有同等的交换地位,都能够在内存不足时释放」。即使禁用了 swap ,当内存高负荷时,系统也会尝试释放内存,只不过它只能释放文件后备页面(例如从磁盘载入内存的代码段、动态链接库、文件系统缓存等):当文件存在脏写时,还是会触发大量写盘;当内存紧缺到即将读取的链接库和文件都要被释放时,还是会导致 thrashing 。总之,我觉得楼主的问题还是在于内存不够。Swap 只是一种帮助缓解(也可能加剧) thrashing 的手段,但 16G 内存不能流畅跑需要 32G 的程序,这是任何软件都改变不了的。Swap 最多把「跑不起」变成「勉强跑起」罢了。

性能影响并不是指 overcommit ,而是 windows 会把后台进程使用的物理内存定时 page in ,此时当切换前台进程时,系统变得非常卡。关闭 pagefile ,无论什么时候切换进程都是流畅的。

没事关下机

换 linux 开发