虚拟内存,内存页面错误与页面错误增量如何处理。(整理)
页面错误
页面错误指当软件试图读取或写入标记为“不存在”的虚拟内存位置时发生的中断。页面错误记录了一个进程必须从硬盘上恢复的次数。
在“任务管理器”中,页面错误是进程中当数据不在内存而必须从磁盘检索的次数。页面错误值从进程启动的时间开始累计。
页面错误增量
在“任务管理器”中,自上一次更新开始的页面错误次数的变化。
具体参见: 帮助--任务管理器--使用进程--进程计数器列标题--页面错误
页面错误不表示程序存在错误。不管内存多大,WINDOWS都离不开虚拟内存(利用磁盘),多少都会利用虚拟内存来存入一些数据,比如程序被最小化。
页面错误 任务管理器 主要检测内存情况的。
转载地址: http://blog.sina.com.cn/s/blog_51396f890100qjtb.html
内存监控
开发的一个项目中,遇到了内存泄露的情况,发现此时页面错误增量在300多,什么是页面错误增量?
上网看了一下,这个就是当程序需要访问内存时,待访问的地址不再物理内存中,需要换页将虚拟内存页换到物理内存中。页面错误增量大,会导致运行效率差,赃页多。
但是为什么会出现这个情况?是OS的问题还是APP的问题?还不清楚,需要再查一下。
如果要查看程序使用情况,可以调用接口GetProcessMemoryInfo
- BOOL GetProcessMemoryInfo(
- HANDLE Process,
- PPROCESS_MEMORY_COUNTERS ppsmemCounters,
- DWORD cb
- );
如果需要限制程序使用虚拟内存的大小,可使用SetProcessWorkingSetSize,注意:这样可能会降低运行效率.
- BOOL SetProcessWorkingSetSize(
- HANDLE hProcess,
- SIZE_T dwMinimumWorkingSetSize,
- SIZE_T dwMaximumWorkingSetSize
- );
内存管理和缓存管理的细节,所以记录详细点,其他的东西(仅指基本组件)理解还可以。。以备忘的形式慢慢po上来~
页面交换
使用技巧
- 页面文件,文件的大小由你对系统的设置决定。具体设置方法如下:打开"我的电脑"的"属性"设置窗口,切换到"高级"选项卡,在"启动和故障恢复"窗口的"写入调试信息"栏,如果你采用的是试和错误报告了。所以折中的办法是在系统盘设置较小的页面文件,只要够用就行了。
- 内存,其最小值设置为物理内存的1.5倍,最大值设置为物理内存的3倍,该分区专门用来存储页面文件,不要再存放其它任何文件。之所以单独划分一个分区用来设置虚拟内存,主要是基于两点考虑:其一,由于该分区上没有其它文件,这样分区不会产生磁盘碎片,这样能保证页面文件的数据读写不受磁盘碎片的干扰;其二,按照Windows对内存的管理技术,Windows会优先使用不经常访问的分区上的页面文件,这样也减少了读取系统盘里的页面文件的机会,减轻了系统盘的压力。
- 页面文件,则其它硬盘分区不设置任何页面文件。因为过多的分区设置页面文件,这样会导致,硬盘磁头反复的在不同的分区来回读取。这样既耽误了系统速率,也会减少硬盘的寿命。当然,如果你有多个硬盘,则可以为每个硬盘都创建一个页面文件。当信息分布在多个页面文件上时,硬盘控制器可以同时在多个硬盘上执行读取和写入操作。这样系统性能将得到提高。
换页错误
![](https://img-my.csdn.net/uploads/201304/04/1365036578_9329.png)
现在内存都是分页的, 如果你要读或者写的页还没分在内存里, 就出现缺页错了。 这种事情在程序启动的时候可能非常频繁, 但是也不用你自己处理, 一般系统会自己搞定这事的, 搞不定就直接死机。。
转载:http://en.wikipedia.org/wiki/Page_fault
页缺失 (计算机科学)
页缺失(英语:Page fault,又名硬错误、分页错误、寻页缺失、缺页中断、页故障等)指的是当软件试图访问已映射在虚拟地址空间中,但是目前并未被加载在物理内存中的一个分页时,由中央处理器的内存管理单元所发出的中断。
通常情况下,用于处理此中断的程序是操作系统的一部分。如果操作系统判断此次访问是有效的,那么操作系统会尝试将相关的分页从硬盘上的虚拟内存文件中调入内存。而如果访问是不被允许的,那么操作系统通常会结束相关的进程。[1]
虽然其名为“页缺失”错误,但实际上这并不一定是一种错误。而且这一机制对于利用虚拟内存来增加程序可用内存空间的操作系统(比如Microsoft Windows和各种类Unix系统)中都是常见且有必要的。
微软在较新版Windows(Windows Vista及以上)的资源监视器中使用“硬错误”这一术语来指代“页缺失”。[2]
目录[隐藏]
|
[编辑]分类
[编辑]软性
软性页缺失指页缺失发生时,相关的页已经被加载进内存,但是没有向MMU注册的情况。操作系统只需要在MMU中注册相关页对应的物理地址即可。[1]
发生这种情况的可能性之一,是一块物理内存被两个或多个程序共享,操作系统已经为其中的一个装载并注册了相应的页,但是没有为另一个程序注册。
可能性之二,是该页已被从CPU的工作集中移除,但是尚未被交换到磁盘上。比如OpenVMS这样的使用次级页缓存的系统,就有可能会在工作集过大的情况下,将某页从工作集中去除,但是不写入硬盘也不擦除(比如说这一页被读出硬盘后没被修改过),只是放入空闲页表。除非有其他程序需要,导致这一页被分配出去了,不然这一页的内容不会被修改。当原程序再次需要该页内的数据时,如果这一页确实没有被分配出去,那么系统只需要重新为该页在MMU内注册映射即可。[3]
[编辑]硬性
与软性页缺失相反,硬性页缺失是指相关的页在页缺失发生时未被加载进内存的情况。这时操作系统需要:[4]
- 寻找到一个空闲的页。或者把另外一个使用中的页写到磁盘上(如果其在最后一次写入后发生了变化的话),并注销在MMU内的记录
- 将数据读入被选定的页
- 向MMU注册该页
硬性页缺失导致的性能损失是很大的。以一块7200rpm的主流机械硬盘为例,其平均寻道时间为8.5毫秒,读入内存需要0.05毫秒。相对的,DDR3内存的访问延迟通常在数十到100纳秒之间,性能差距可能会达到8万到22万倍。
另外,有些操作系统会将程序的一部分延迟到需要使用的时候再加载入内存执行,以此来提升性能。这一特性也是通过捕获硬性页缺失达到的。[5]
当硬性页缺失过于频繁的发生时,称发生系统颠簸。
[编辑]无效
当程序访问的虚拟地址是不存在于虚拟地址空间内的时候,则发生无效页缺失。一般来说这是个软件问题,但是也不排除硬件可能,比如因为内存故障而损坏了一个正确的指针。
具体动作与所使用的操作系统有关,比如Windows会使用异常机制向程序报告,而类Unix系统则会使用信号机制。如果程序未处理相关问题,那么操作系统会执行默认处理方式,通常是转储内存、终止相关的程序,然后向用户报告。[4][6]
[编辑]参考与延伸阅读
- ^ 1.0 1.1 Red Hat Enterprise Linux 3: Introduction to System Administration, 4.4. Virtual Memory: The Details. RedHat [2013-02-11].
- ^ 参见资源监视器帮助
- ^ HP OpenVMS Systems Documentation, Chapter 7 Evaluating the Memory Resource. HP [2013-02-11].
- ^ 4.0 4.1 So What Is A Page Fault?. OSR Online. 2003-05-07 [2013-02-11].
- ^ Red Hat Enterprise Linux 3: Introduction to System Administration, 4.5. Virtual Memory Performance Implications. RedHat [2013-02-11]. See note.
- ^ UnhandledExceptionFilter function. Microsoft MSDN [2013-02-11].
- John L. Hennessy, David A. Patterson, Computer Architecture, A Quantitative Approach (ISBN 1-55860-724-2)
- Tanenbaum, Andrew S. Operating Systems: Design and Implementation (Second Edition). New Jersey: Prentice-Hall 1997.
- Intel Architecture Software Developer's Manual–Volume 3: System Programming
非法访问和无效页错误处理
非法访问和无效页错误可能会导致程序崩溃,分割错误,总线错误或核心转储的操作系统环境。这些问题通常是由于软件缺陷,但可能会损坏硬件内存错误,如由超频所引起的,指针和正确的软件故障。
如Windows和UNIX的操作系统(以及其他类UNIX系统)提供不同的页故障引起的错误报告机制。Windows使用结构化异常处理报告故障无效的存取访问冲突异常,UNIX(UNIX-like)的系统通常使用信号,如SIGSEGV,报告这些错误条件的方案。
如果收到错误的程序不处理,操作系统执行的默认操作,一般涉及终止正在运行的过程中导致错误的条件,并通知用户,该计划已发生了故障。最新版本的Windows中经常报道这样的问题,就类似“这个程序必须关闭”(有经验的用户或程序员提供一个调试器仍然可以获取详细信息)。最新的Windows版本UNIX和类UNIX操作系统报告这些条件的用户提供的错误信息,如“分割违反”或“巴士,也可以编写一个小型转储(类似的原则,以一个核心转储)描述的状态崩溃的过程。错误“,也可能产生核心转储。
[ 编辑 ]性能
MMU
求助编辑百科名片
目录
- 历史
- 相关概念
- 功能
- MMU和CPU
- 展开
- 历史
- 相关概念
- 功能
- MMU和CPU
- 展开
虚拟内存,内存页面错误与页面错误增量如何处理。(整理)相关推荐
- 13 操作系统第三章 内存管理 虚拟内存 请求分页管理方式 页面置换算法 页面分配策略
文章目录 1 虚拟内存 1.1 传统存储管理方式的特征.缺点 1.2 局部性原理 1.3 虚拟内存主要特征 1.4 如何实现虚拟内存技术 1.5 虚拟内存的基本概念小结 2 请求分页管理方式 2.1 ...
- web.xml配置错误页面,及输出错误信息
转自:https://blog.csdn.net/bao19901210/article/details/23370407 1.需要在web.xml中配置相关信息 1 <!-- 默认的错误处理页 ...
- php框架全局自定义错误,[TP笔记]ThinkPHP自定义错误页面、成功页面及异常页面
看了前面分享的一篇<什么是真正的程序员?>,觉得自己离这个目标还差的很远,所以要抓紧朝着这个方向前进.作为一名PHP小码农,掌握一种框架是必须的.所以今天开始我们就从国产PHP框架 Thi ...
- 极富创意的404错误个性页面设计欣赏
404错误编码表示服务器找不到指定的页面,这个错误提示页面是可以自定义的,所以很多有创意的人设计了很多有趣的404页面.挑选一些有创意的404错误页面,大家一起来欣赏吧! 字典形式 卡通娃娃来凑趣 清 ...
- Tomcat 9.0.6 HostManager页面 403 Access Denied 错误
版本:Tomcat 9.0.6 问题:访问HostManager页面出现 Access Denied 错误 403 Access Denied You are not authorized to vi ...
- Django框架(18.Django中的自定义错误500页面和不存在404页面)
Django中自定义404页面和500页面 有时访问不存在的页面是时候,并且没有关闭调试模式则会暴露我们的代码 404:找不到页面,关闭调试模式之后,默认会显示一个标准的错误页面,如果要显示自定义的页 ...
- 设计友好的错误信息页面
大多数用户看到"该页无法显示","服务器内部错误"等默认错误提示信息会立马关闭浏览器窗口,我们为什么不能自定义一下呢?让用户从错误信息中得到真正的帮助? ...
- 网站安全狗”响应内容保护“网页错误返回页面优化功能介绍
网站安全狗最新版本(主程序版本号:3.2.08157)在"资源保护"模块多了一个功能叫做:响应内容保护.如下图所示: <ignore_js_op> 该模块的主要功能是, ...
- 页面缓存导致数据错误
页面缓存导致数据错误 服务端渲染(ssr)会将 API 数据做页面元素返回给前端, 而浏览器会认为是静态页面并将页面缓存, 导致每次访问时都是缓存用户数据. 页面又包含对数据的处理并提交. 当多端更新 ...
最新文章
- oracle最大实例数,【Oracle】RAC的多实例数据迁移至单机的多实例。
- 取得数组中的随机数random.nextInt(index)
- Flutter之Widget、Element、renderObject
- 025_CSS框模型概述
- Markdown中常用的转义字符
- Linux echo命令和查看环境变量实例
- [转帖]Sqlcmd使用详解
- Postman中几个body请求格式区别及使用说明
- Net Core中数据库事务隔离详解——以Dapper和Mysql为例
- linux+平均磁盘请求数量_Linux 查看磁盘IO并找出占用IO读写很高的进程
- Hexo添加Follow me on CSDN效果
- 如何使用Hasu USB to USB Controller Converter刷写tmk固件交换Caps和Ctrl
- python等值面追踪_等值线的追踪算法(2)
- 我的计算机制作幻灯片在哪,如何制作幻灯片呢?具体的步骤能教教我嘛?
- linux phpcms,PHPCMS任意文件下载之exp编写
- 股权转让所得个人所得税管理办法(试行)
- 【踩坑日记 · 嵌入式 Linux】在香橙派 Zero 2 上编译安装 CH340 驱动(OrangePi Zero 2)
- 服务器重启django项目
- 谷歌地图的简单轨迹移动播放
- C# 互操 调用COM组件
热门文章
- moment.js 搜索栏获取最近一周,一个月,三个月,半年,一年时间
- 今日学习在线编程题:弓形圆心角
- 网络中常用的三种拓扑汇聚技术
- 谁在做中国最赚钱的网站
- 解决mathtype中Euclid math one花体字字体空白不显示问题
- python小游戏——兔鼠大战
- 武夷学院计算机网络系统,武夷学院计算机网络王超帅实验报告双绞线的制作与测试.doc...
- 解决Adobe Dreamweaver 2020在编程敲代码时又卡又慢延迟的问题(复制黏贴打字都卡)
- 《云计算白皮书(2021)》(可下载)
- 七、DevOps学习笔记