Chiphell - 分享与交流用户体验

 找回密码
 加入我们
搜索
      
查看: 45459|回复: 48

[内存] 谈谈所谓的要不要关闭虚拟内存

[复制链接]
发表于 2018-8-5 16:12 | 显示全部楼层 |阅读模式
本帖最后由 wybb 于 2018-8-5 22:14 编辑

现在主流电脑配置的内存都不小,16G属于常规,32g都算不上大,经常会有人疑惑要不要关闭系统的“虚拟内存”,或者去设置为固定值。我就从软件的角度来聊聊。
实际上很多人并不了解虚拟内存到底是干啥的,大部分人接受的常规理解就是“物理内存不够然后用虚拟内存”。实际上这个只是为了方便大众理解的不精确的说法。

首先从比较精确的的角度上来说,磁盘上分配的那个东西不叫 虚拟内存,而是叫分页文件(pagefile),pagefile属于操作系统虚拟内存管理架构,但本身并不叫虚拟内存。

操作系统可以提交的虚拟内存大小=物理内存+分页文件。注意这里说的是提交并不是使用。对于操作系统来说,请求内存、提交内存、使用内存是不同的步骤


下图电脑装了16G内存,虚拟内存自动管理系统默认分配一倍大小的分页文件。所以整个系统可提交的虚拟内存大小是16+16=32G

QQ截图20180805153705.png


QQ截图20180805145943.png

下面使用一个测试程序,申请了128G内存,可以发现就算一台电脑只有16G内存,照样可以申请成功。同时单纯的申请并不会占用任何物理内存

QQ图片20180805154154.png

内存在使用之前还必须进行所谓的提交操作(COMMIT),提交操作会消耗整个系统的总虚拟内存数值(上限=16+16=32G),下面一个测试程序提交25G的内存,这个示例中系统的总虚拟内存已经消耗了30G,但实际上程序几乎没有使用任何物理内存(0.4M),在windows下只对内存进行读写才会产生实际的物理内存消耗
假如下图中系统的分页文件已经达到设置的最大值(或者固定值),实际上整个系统还能使用的内存并不是15.9g-3.4g=12.5g的物理内存,而仅仅只有32.9-29.3=3.6g的内存可以用了,任何程序提交或使用超过3.6g,不管你物理内存还剩下多少,系统都将提示内存不足

QQ截图20180805155124.png
QQ截图20180805155205.png


操作系统提示内存不够的时候,实际上并不是物理内存饱和,而是虚拟内存上限(物理内存+分页文件)饱和了,就算物理内存实际还有很大的剩余,在一些情况下照样会造成系统内存不够。

部分游戏,比如古墓丽影10,就会发现这个游戏会提交相当多的内存(实际物理内存还没使用到),假如关闭分页文件或者设置了比较小的值,将导致可申请的虚拟内存上限降低,虽然16G内存足够玩这个游戏,但是还是会出现系统提示内存不够的情况。

所以,分页文件大小并不只是用来放入物理内存放不下的数据,还会影响整个系统的理论内存使用上限。一般来说还是建议让操作系统自己管理。
而且有些人会有一个习惯,把分页文件的最大最小值设置成一样,这是一个流传十几年的设置方式。在HDD的时代,在操作系统刚装好的时候,磁盘分区相对比较空闲,给分页文件固定大小的好处是可以预先分配一个比较连续的磁盘空间,避免碎片影响性能。但是现在已经是SSD的年代了,并不存在碎片问题,所以那些还保留着设置分页固定大小的老鸟们也可以改掉这个习惯了










评分

参与人数 8邪恶指数 +55 收起 理由
solder + 5
serguy + 5
richardlynn + 5
shukefeifei + 10
kthlon + 10
正义 + 10
Mortif + 5
醉酒棕熊 + 5

查看全部评分

发表于 2018-8-5 16:44 来自手机 | 显示全部楼层
我关心虚拟内存,SYSTEM.INI有个配置要改,就是内存没用完 不用页面文件
发表于 2018-8-5 16:52 | 显示全部楼层
跟我一样,以前内存不够,硬盘慢,虚拟内存绞尽脑汁去搞
现在直接丢win10自己管,爱咋咋地
发表于 2018-8-5 16:53 | 显示全部楼层
之前就是因为设置一个固定值(1GB)而玩吃鸡的时候经常弹出内存不足(物理内存16GB)。。。
设置系统自动管理就没此问题出现了。
发表于 2018-8-5 16:56 | 显示全部楼层
WIN10之前,我都是手动设,WIN10后,系统自己动
发表于 2018-8-5 17:01 | 显示全部楼层
以前迷信,关了也没感觉有提升,还总是有些软件报错。
发表于 2018-8-5 17:06 | 显示全部楼层
搞了个16g的optane专门放这个
发表于 2018-8-5 17:12 来自手机 | 显示全部楼层
win8开始,自动还算合理。win7太简单粗暴,大内存默认的页面文件体积太大了
发表于 2018-8-5 17:20 来自手机 | 显示全部楼层
没必要关了 或者设置太小 现在速度够快 而且设置小了很多程序报错
发表于 2018-8-5 17:43 | 显示全部楼层
我设置3-4g大小,并且放到内存盘里运行
发表于 2018-8-5 17:47 | 显示全部楼层
yysqu 发表于 2018-8-5 17:06
搞了个16g的optane专门放这个

分页文件里的一般都是冷数据,
除非你只有不到4G物理内存,不然就是用900p来放也不会有任何提升
发表于 2018-8-5 18:03 | 显示全部楼层
我32g内存关闭了没有什么报错的
发表于 2018-8-5 18:05 来自手机 | 显示全部楼层
内存虚拟化和虚拟内存是两个概念。。。
发表于 2018-8-5 18:32 | 显示全部楼层
hlhaidy 发表于 2018-8-5 18:03
我32g内存关闭了没有什么报错的

试试运行photoshop
 楼主| 发表于 2018-8-5 18:50 | 显示全部楼层
yysqu 发表于 2018-8-5 17:06
搞了个16g的optane专门放这个

当物理内存够多的时候,分页文件用到的概率很小,当不够的时候瞬间写入的分页文件的数据可能会很多,而且操作系统会批量写入一批数据,16g的optane写入速度只有100多M,假如突发写入600M数据需要近5秒钟,反而不如nvme的ssd高效,分页文件是4k和顺序读写都需要保证的。
发表于 2018-8-5 19:01 | 显示全部楼层
基本上不管了
发表于 2018-8-5 19:21 | 显示全部楼层
想问下lz,如果系统有多个ssd,那么分别在每个ssd上设置一部分的虚拟内存是否有提升性能的意义
发表于 2018-8-5 19:34 | 显示全部楼层
相比虚拟内存,我更在意的是这部分“备用”内存,1:电脑开机时间久了或者使用的软件多起来,这部分内存的占用就会增加,而且占用很大

2:一些管家或者助手之类的软件中的内存清理,使用一下就会清理掉这部分,使内存释放出来,但如果是负载中的电脑,没多久后“备用”又占回去了
3:当使用中的内存和备用内存合计起来,占用接近整个系统内存的情况下,会引起系统的不稳定,出现内存不足出错的情况
QQ图片20180805191803.png
 楼主| 发表于 2018-8-5 20:28 | 显示全部楼层
jiangjiejjjjjj 发表于 2018-8-5 19:21
想问下lz,如果系统有多个ssd,那么分别在每个ssd上设置一部分的虚拟内存是否有提升性能的意义 ...

就我的理解,意义很小,分页文件并不会优化成类似于多硬盘并行操作(raid0),仅仅是一个分页文件空间不够的时候用另一个而已的简单模式
发表于 2018-8-5 20:40 | 显示全部楼层
32G物理内存,关闭虚拟内存的话玩war3这种十几年前的游戏 有些地图玩着玩着都能弹错说内存不足...
 楼主| 发表于 2018-8-5 20:43 | 显示全部楼层
本帖最后由 wybb 于 2020-8-1 10:00 编辑
frenzy 发表于 2018-8-5 19:34
相比虚拟内存,我更在意的是这部分“备用”内存,1:电脑开机时间久了或者使用的软件多起来,这部分内存的 ...

你的理解肯定是不对的,备用内存是操作系统用于对磁盘文件的缓冲,也就是最近软件操作的文件假如有空闲的内存,那么系统会将磁盘文件的数据保存在内存中。这些空间是可以动态的被释放的。
下面用一个简单的程序来让所有空闲内存空间都转化为备用

转化前
QQ截图20180805203801.png

转化后,所有空闲内存都用于文件缓存
QQ截图20180805203930.png




备用内存中空间都可以当成是空闲内存使用,绝对不会有任何会造成系统不稳定的情况,甚至应该是完全感觉不出备用占满会对性能有任何影响,假如层主碰到备用占用满导致系统稳定性存在问题,那么反而应该去检查自己电脑的内存的稳定性是不是有问题。
发表于 2018-8-5 20:54 | 显示全部楼层
wybb 发表于 2018-8-5 20:43
你的理解肯定是不对的,备用内存是操作系统用于对磁盘文件的缓冲,也就是最近软件操作的文件假如有空闲的 ...

我一开始也是如你所说的这样认为的,内存稳定性肯定是没问题的,又没超频,而且test也测试过的

只是我的情况并非个例,我的几个朋友也会有类似情况,也许是其他原因导致所造成的巧合吧
发表于 2018-8-5 21:20 | 显示全部楼层
本帖最后由 jerrytsao 于 2018-8-5 23:08 编辑

https://support.microsoft.com/en-us/help/2860880/how-to-determine-the-appropriate-page-file-size-for-64-bit-versions-of
https://blogs.technet.microsoft.com/markrussinovich/2008/11/17/pushing-the-limits-of-windows-virtual-memory/

巨硬官方Support和Technet有详细的解释和自我打脸, 主要就是确保Commit Limit > 运行程序要求的Total Commit Charge

所以就算现在X99上128GB RAM, 我还是保留习惯在非OS盘上设Pagefile Min=4092MB Max=RAM, 任务管理器上的Commit总量通常都是131GB
How Big Should I Make the Paging File?

......even Microsoft has published misleading recommendations......Since the commit limit sets an upper bound on how much private and pagefile-backed virtual memory can be allocated concurrently by running processes, the only way to reasonably size the paging file is to know the maximum total commit charge for the programs you like to have running at the same time. If the commit limit is smaller than that number, your programs won't be able to allocate the virtual memory they want and will fail to run properly......

发表于 2018-8-5 21:25 | 显示全部楼层
我就不喜欢让WINDOWS来管理虚拟内存,我喜欢一切自己掌控,我的32G内存用虚拟硬盘软件划出16G做成虚拟盘,然后设置2G作为虚拟内存,剩下14G把浏览器缓存空间和系统变量等都放在该临时硬盘上,BT电骡和迅雷的下载目录也是用虚拟硬盘减少物理硬盘损耗,到目前为止没出现什么问题
发表于 2018-8-5 21:29 来自手机 | 显示全部楼层
16G,关闭虚拟内存已经3年了,没有出过任何故障。这个应该和软件有关
发表于 2018-8-5 21:40 | 显示全部楼层
wybb 发表于 2018-8-5 20:28
就我的理解,意义很小,分页文件并不会优化成类似于多硬盘并行操作(raid0),仅仅是一个分页文件空间不 ...

好的,那我就设置在性能最强的ssd上。
发表于 2018-8-5 21:51 来自手机 | 显示全部楼层
魔鬼的微笑 发表于 2018-8-5 21:25
我就不喜欢让WINDOWS来管理虚拟内存,我喜欢一切自己掌控,我的32G内存用虚拟硬盘软件划出16G做成虚拟盘, ...

那不是每次重启都要设置?我单挂了一个机械盘做下载盘,分页文件只设置C盘自动管理,其他关闭
发表于 2018-8-5 22:43 | 显示全部楼层
16G 关了6年了
发表于 2018-8-5 23:04 | 显示全部楼层
打游戏确实碰到过好几次说内存不够,但实际很多
发表于 2018-8-5 23:19 来自手机 | 显示全部楼层
frenzy 发表于 2018-8-5 11:34
相比虚拟内存,我更在意的是这部分“备用”内存,1:电脑开机时间久了或者使用的软件多起来,这部分内存的 ...

缓存文件 加快访问的 程序需要用更多内存时系统会自动释放 你以为windows就是用图上那4.4g吗 其实和mac一样都是有多少用多少 永远都是尽量填满你的物理内存
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

小黑屋|手机版|Archiver|Chiphell ( 沪ICP备12027953号-5 )沪公网备310112100042806 上海市互联网违法与不良信息举报中心

GMT+8, 2021-1-28 19:56 , Processed in 0.013136 second(s), 22 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2007-2021 Chiphell.com All rights reserved.

快速回复 返回顶部 返回列表