电脑内存都被谁占了

222 天前
 AoEiuV020JP
我真的怀疑有没有什么病毒隐藏了进程信息,
我电脑 24G 内存,动不动就炸,已提交内存总在 22G 以上,
尤其最近关闭了虚拟内存,实在是公司电脑硬盘太拉胯,一直用虚拟内存就一直卡,
关了虚拟内存就反复炸内存, 任务管理器里永远找不到内存占用高的,虚拟机和 wsl 也没在用,
难道真的这几十一两百兆能吃满 24G ?
10596 次点击
所在节点    程序员
87 条回复
icyalala
221 天前
内存有 overcommit 的概念。
就是说当程序申请内存时,这部分内存大小是算作“已提交”的,但程序可能只用到了部分内存。
比如 void *buf = malloc(100 * 1024 * 1024); 这算做"已提交" 100MB ,这时是不消耗物理内存的。但是 memset(buf, 0, 20 * 1024 * 1024); 操作就是 "使用中" 20MB ,这时系统才会实际分配物理内存。

如果 "已提交" 的大小超过物理内存大小这就是 overcommit 。
Linux 允许 overcommit ,毕竟 commit 不是真实使用,所以提交再多也无所谓,但一旦访问超出可用内存,就会开始杀进程。所以 Linux 下编程习惯是可以尽量申请更多内存,但只要访问部分足够小就行。但 Windows 一般是不允许 overcommit 的,也就是只要超过可用内存,提交时就会直接失败。这时如果开启页面文件,系统会优先把那些已提交但未使用的内存交换到磁盘,但由于未使用所以并不会发生 IO 。

你如果听信那些莫名其妙的优化建议,把页面文件关掉,那么由于"使用中" 内存肯定小于 "已提交" 内存,那你的物理内存肯定会无法利用满。
sloknyyz
221 天前
24g 不够用太正常了,我之前 32G 都动不动满内存,现在换到 64G(花了 1 千不到),终于解决了内存焦虑,开发也更顺畅了。建议花点钱直接拉满,吃饭的东西没必要省,你查来查去会发现,内存它就是要用这么多
luxor
221 天前
@w568w 无论是开不开页交换,已提交内存也是有上限的。到达上限后,即便物理内存还有很多剩余,应用程序也无法申请新的物理内存。
关闭 pagefile 当然可以提高性能,可以减少大量的磁盘读写,延长磁盘的寿命。只不过某些应用对已提交内存占用的优化不够,造成实际物理内存占用不高,但已提交内存占用很高。开了 pagefile 后,只是推迟了已提交内存被占满的情况。只要开启更多类似的大型应用,已提交内存同样会被占满。根源是在应用程序自身。
kenvix
221 天前
@icyalala #61 唯一正解,Windows 发生 overcommit 的时候具体也不是交换到磁盘,而是单纯保留一部分 SWAP 磁盘空间,实际上是没有额外性能开销的
vfs
221 天前
@AoEiuV020JP 都用上 android studio 了, 就给 8G 的内存的机器啊。。。你让老板在你的机器上开发试试
w568w
221 天前
@luxor

楼上关于 Overcommit 的问题解释得很清楚了。我可以再总结一下:

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


那个年代,虽然生活没有那么丰富多彩,但是简单。
zhangeric
221 天前
这个可以点击那个资源监视器查看得.
YGBlvcAK
221 天前
我遇到过的是 esxi 直通显卡给 debian10 ,内存会一点点上涨直至爆了,所以如果全关了内存还在上涨,有可能是某个驱动或程序导致的内存泄漏
wetalk
221 天前
@YouMoeYi 16G 开机占 6G 不合理的,可能自启太多了,正常 20 ~ 25%左右
incubus
221 天前
vipfts
221 天前
@dwSun 谢谢哈, 让我一下回到 20 年前
asdgsdg98
221 天前
虚拟机关了就行,虚拟机占用的内存有些不会表现在详细信息里
declandragon
221 天前
我最近也在看这个,莫名奇妙 90% 以上了
已经发现了一个问题就是 docker desktop 会占用 14%左右,但是任务管理器上面看不懂

https://s21.ax1x.com/2024/04/17/pFxqrIs.png
MoeMoesakura
221 天前
Jetbrains 家跟浏览器吧 20G 内存的 Linux Laptop 都经常进 swap (当然是 goland 之类玩意跟 chrome 一起开的
declandragon
221 天前
#74 看不懂 打错了,是 看不到
Lightbright
221 天前
64g 以下不要关闭页面文件,宝贝
obama
221 天前
8G ram 关虚拟内存的路过
verrickt
221 天前
@w568w 我理解系统因为 swap 而出现大量磁盘读写的情况大概率是抖动[thrashing],这时因为频繁的 page fault 占用了大量 CPU cycle 导致 os 的响应速度慢了成千上万倍,ram 的频繁读写还没持续多久,用户自己就先受不了了
verrickt
221 天前
@verrickt 如果 Windows 不允许 over commit 的话就没 thrashing 什么事了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1032942

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX