页面错误

页面错误指当软件试图读取或写入标记为“不存在”的虚拟内存位置时发生的中断。页面错误记录了一个进程必须从硬盘上恢复的次数。

在“任务管理器”中,页面错误是进程中当数据不在内存而必须从磁盘检索的次数。页面错误值从进程启动的时间开始累计。

页面错误增量

在“任务管理器”中,自上一次更新开始的页面错误次数的变化。

具体参见: 帮助--任务管理器--使用进程--进程计数器列标题--页面错误

页面错误不表示程序存在错误。不管内存多大,WINDOWS都离不开虚拟内存(利用磁盘),多少都会利用虚拟内存来存入一些数据,比如程序被最小化。

页面错误 任务管理器 主要检测内存情况的。

转载地址: http://blog.sina.com.cn/s/blog_51396f890100qjtb.html

内存监控

开发的一个项目中,遇到了内存泄露的情况,发现此时页面错误增量在300多,什么是页面错误增量?

上网看了一下,这个就是当程序需要访问内存时,待访问的地址不再物理内存中,需要换页将虚拟内存页换到物理内存中。页面错误增量大,会导致运行效率差,赃页多。

但是为什么会出现这个情况?是OS的问题还是APP的问题?还不清楚,需要再查一下。

如果要查看程序使用情况,可以调用接口GetProcessMemoryInfo

view plaincopy to clipboardprint?
  1. BOOL GetProcessMemoryInfo(
  2. HANDLE Process,
  3. PPROCESS_MEMORY_COUNTERS ppsmemCounters,
  4. DWORD cb
  5. );

如果需要限制程序使用虚拟内存的大小,可使用SetProcessWorkingSetSize,注意:这样可能会降低运行效率.

view plaincopy to clipboardprint?
  1. BOOL SetProcessWorkingSetSize(
  2. HANDLE hProcess,
  3. SIZE_T dwMinimumWorkingSetSize,
  4. SIZE_T dwMaximumWorkingSetSize
  5. );

内存管理和缓存管理的细节,所以记录详细点,其他的东西(仅指基本组件)理解还可以。。以备忘的形式慢慢po上来~

页面交换

使用技巧

对于虚拟内存如何设置的问题,微软已经给我们提供了官方的解决办法,对于一般情况下,我们推荐采用如下的设置方法:
  • 页面文件,文件的大小由你对系统的设置决定。具体设置方法如下:打开"我的电脑"的"属性"设置窗口,切换到"高级"选项卡,在"启动和故障恢复"窗口的"写入调试信息"栏,如果你采用的是试和错误报告了。所以折中的办法是在系统盘设置较小的页面文件,只要够用就行了。
  • 内存,其最小值设置为物理内存的1.5倍,最大值设置为物理内存的3倍,该分区专门用来存储页面文件,不要再存放其它任何文件。之所以单独划分一个分区用来设置虚拟内存,主要是基于两点考虑:其一,由于该分区上没有其它文件,这样分区不会产生磁盘碎片,这样能保证页面文件的数据读写不受磁盘碎片的干扰;其二,按照Windows对内存的管理技术,Windows会优先使用不经常访问的分区上的页面文件,这样也减少了读取系统盘里的页面文件的机会,减轻了系统盘的压力。
  • 页面文件,则其它硬盘分区不设置任何页面文件。因为过多的分区设置页面文件,这样会导致,硬盘磁头反复的在不同的分区来回读取。这样既耽误了系统速率,也会减少硬盘的寿命。当然,如果你有多个硬盘,则可以为每个硬盘都创建一个页面文件。当信息分布在多个页面文件上时,硬盘控制器可以同时在多个硬盘上执行读取和写入操作。这样系统性能将得到提高。

换页错误

换页错误,即Page fault。
Page Fault 是在进程尝试执行代码指导,或者引用进程所映射物理内存中并不存在的数据页时,操作系统记录的事件。换句话说,进程需要的内存页实际上可能还处于物理内存中,但是由于它无法再分配到进程中,所以当进程将此页读取回到它的内存页时,就发生了Page Fault。
在开发上,我认为主要是优化内存读取方式,如果存在大量的文件读取,虚拟内存也就多,换页次数就多,自然也很多,不作为主要的评测指标。

现在内存都是分页的, 如果你要读或者写的页还没分在内存里, 就出现缺页错了。 这种事情在程序启动的时候可能非常频繁, 但是也不用你自己处理, 一般系统会自己搞定这事的, 搞不定就直接死机。。

转载:http://en.wikipedia.org/wiki/Page_fault

页缺失 (计算机科学)

维基百科,自由的百科全书
(重定向自Page fault)

页缺失(英语:Page fault,又名硬错误分页错误寻页缺失缺页中断页故障等)指的是当软件试图访问已映射在虚拟地址空间中,但是目前并未被加载在物理内存中的一个分页时,由中央处理器的内存管理单元所发出的中断。

通常情况下,用于处理此中断的程序是操作系统的一部分。如果操作系统判断此次访问是有效的,那么操作系统会尝试将相关的分页从硬盘上的虚拟内存文件中调入内存。而如果访问是不被允许的,那么操作系统通常会结束相关的进程。[1]

虽然其名为“页缺失”错误,但实际上这并不一定是一种错误。而且这一机制对于利用虚拟内存来增加程序可用内存空间的操作系统(比如Microsoft Windows和各种类Unix系统)中都是常见且有必要的。

微软在较新版Windows(Windows Vista及以上)的资源监视器中使用“硬错误”这一术语来指代“页缺失”。[2]

目录

[隐藏]

  • 1 分类

    • 1.1 软性
    • 1.2 硬性
    • 1.3 无效
  • 2 参考与延伸阅读

[编辑]分类

[编辑]软性

软性页缺失指页缺失发生时,相关的页已经被加载进内存,但是没有向MMU注册的情况。操作系统只需要在MMU中注册相关页对应的物理地址即可。[1]

发生这种情况的可能性之一,是一块物理内存被两个或多个程序共享,操作系统已经为其中的一个装载并注册了相应的页,但是没有为另一个程序注册。

可能性之二,是该页已被从CPU的工作集中移除,但是尚未被交换到磁盘上。比如OpenVMS这样的使用次级页缓存的系统,就有可能会在工作集过大的情况下,将某页从工作集中去除,但是不写入硬盘也不擦除(比如说这一页被读出硬盘后没被修改过),只是放入空闲页表。除非有其他程序需要,导致这一页被分配出去了,不然这一页的内容不会被修改。当原程序再次需要该页内的数据时,如果这一页确实没有被分配出去,那么系统只需要重新为该页在MMU内注册映射即可。[3]

[编辑]硬性

与软性页缺失相反,硬性页缺失是指相关的页在页缺失发生时未被加载进内存的情况。这时操作系统需要:[4]

  1. 寻找到一个空闲的页。或者把另外一个使用中的页写到磁盘上(如果其在最后一次写入后发生了变化的话),并注销在MMU内的记录
  2. 将数据读入被选定的页
  3. 向MMU注册该页

硬性页缺失导致的性能损失是很大的。以一块7200rpm的主流机械硬盘为例,其平均寻道时间为8.5毫秒,读入内存需要0.05毫秒。相对的,DDR3内存的访问延迟通常在数十到100纳秒之间,性能差距可能会达到8万到22万倍。

另外,有些操作系统会将程序的一部分延迟到需要使用的时候再加载入内存执行,以此来提升性能。这一特性也是通过捕获硬性页缺失达到的。[5]

当硬性页缺失过于频繁的发生时,称发生系统颠簸。

[编辑]无效

当程序访问的虚拟地址是不存在于虚拟地址空间内的时候,则发生无效页缺失。一般来说这是个软件问题,但是也不排除硬件可能,比如因为内存故障而损坏了一个正确的指针。

具体动作与所使用的操作系统有关,比如Windows会使用异常机制向程序报告,而类Unix系统则会使用信号机制。如果程序未处理相关问题,那么操作系统会执行默认处理方式,通常是转储内存、终止相关的程序,然后向用户报告。[4][6]

[编辑]参考与延伸阅读

  1. 1.0 1.1 Red Hat Enterprise Linux 3: Introduction to System Administration, 4.4. Virtual Memory: The Details. RedHat [2013-02-11].
  2. ^ 参见资源监视器帮助
  3. ^ HP OpenVMS Systems Documentation, Chapter 7 Evaluating the Memory Resource. HP [2013-02-11].
  4. 4.0 4.1 So What Is A Page Fault?. OSR Online. 2003-05-07 [2013-02-11].
  5. ^ Red Hat Enterprise Linux 3: Introduction to System Administration, 4.5. Virtual Memory Performance Implications. RedHat [2013-02-11]. See note.
  6. ^ 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操作系统报告这些条件的用户提供的错误信息,如“分割违反”或“巴士,也可以编写一个小型转储(类似的原则,以一个核心转储)描述的状态崩溃的过程。错误“,也可能产生核心转储。

[ 编辑 ]性能

页故障,由于其本身的性质,一个程序或操作系统的性能降低和退化的情况可能会导致颠簸。优化程序和操作系统数量减少的页面错误,提高程序性能,甚至整个系统。的两个主要侧重的优化工作,降低整体内存使用率和改善记忆的地方。为了减少页面系统中的故障,程序员必须使用适当的页面置换算法,适合当前需求和最大限度地提高了页面的点击。许多人都被提出,如实施启发式算法,以减少发病的页面错误。一般情况下,提供更多的物理内存,也减少了页面错误。

主要页错误的传统(硬盘)计算机上可以有一个显着的性能影响。平均的硬盘具有的平均旋转等待时间为3ms,寻道时间为5ms,和转印时间为0.05毫秒/页。因此,总的寻呼时间是8ms的(8 000我们)附近。如果内存访问时间为0.2,那么页面故障,使操作约40,000倍的速度。

MMU

求助编辑百科名片

MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权。

目录

历史
相关概念
功能
MMU和CPU
展开
历史
相关概念
功能
MMU和CPU
展开

编辑本段历史

许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还有用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序分割成许多称为覆盖块(overlay)的片段。覆盖块0首先运行,结束时他将调用另一个覆盖块。虽然覆盖块的交换是由OS完成的,但是必须先由程序员把程序先进行分割,这是一个费时费力的工作,而且相当枯燥。人们必须找到更好的办法从根本上解决这个问题。不久人们找到了一个办法,这就是虚拟存储器(virtual memory).虚拟存储器的基本思想是程序,数据,堆栈的总的大小可以超过物理存储器的大小,操作系统把当前使用的部分保留在内存中,而把其他未被使用的部分保存在磁盘上。比如对一个16MB的程序和一个内存只有4MB的机器,操作系统通过选择,可以决定各个时刻将哪4M的内容保留在内存中,并在需要时在内存和磁盘间交换程序片段,这样就可以把这个16M的程序运行在一个只具有4M内存机器上了。而这个16M的程序在运行前不必由程序员进行分割。

编辑本段相关概念

任何时候,计算机上都存在一个程序能够产生的地址集合,我们称之为地址范围。这个范围的大小由CPU的位数决定,例如一个32位的CPU,它的地址范围是0~0xFFFFFFFF (4G),而对于一个64位的CPU,它的地址范围为0~0xFFFFFFFFFFFFFFFF (16E).这个范围就是我们的程序能够产生的地址范围,我们把这个地址范围称为虚拟地址空间,该空间中的某一个地址我们称之为虚拟地址。与虚拟地址空间和虚拟地址相对应的则是物理地址空间和物理地址,大多数时候我们的系统所具备的物理地址空间只是虚拟地址空间的一个子集。这里举一个最简单的例子直观地说明这两者,对于一台内存为256M的32bit x86主机来说,它的虚拟地址空间范围是0~0xFFFFFFFF(4G),而物理地址空间范围是0x000000000~0x0FFFFFFF(256M)。
大多数使用虚拟存储器的系统都使用一种称为分页(paging)机制。虚拟地址空间划分成称为页(page)的单位,而相应的物理地址空间也被进行划分,单位是页帧(frame).页和页帧的大小必须相同。在这个例子中我们有一台可以生成32位地址的机器,它的虚拟地址范围从0~0xFFFFFFFF(4G),而这台机器只有256M的物理地址,因此他可以运行4G的程序,但该程序不能一次性调入内存运行。这台机器必须有一个达到可以存放4G程序的外部存储器(例如磁盘或是FLASH),以保证程序片段在需要时可以被调用。在这个例子中,页的大小为4K,页帧大小与页相同——这点是必须保证的,因为内存和外围存储器之间的传输总是以页为单位的。对应4G的虚拟地址和256M的物理存储器,他们分别包含了1M个页和64K个页帧。

编辑本段功能

1、将虚拟地址映射为物理地址

2、提供硬件机制的内存访问授权

虚拟内存,内存页面错误与页面错误增量如何处理。(整理)相关推荐

  1. 13 操作系统第三章 内存管理 虚拟内存 请求分页管理方式 页面置换算法 页面分配策略

    文章目录 1 虚拟内存 1.1 传统存储管理方式的特征.缺点 1.2 局部性原理 1.3 虚拟内存主要特征 1.4 如何实现虚拟内存技术 1.5 虚拟内存的基本概念小结 2 请求分页管理方式 2.1 ...

  2. web.xml配置错误页面,及输出错误信息

    转自:https://blog.csdn.net/bao19901210/article/details/23370407 1.需要在web.xml中配置相关信息 1 <!-- 默认的错误处理页 ...

  3. php框架全局自定义错误,[TP笔记]ThinkPHP自定义错误页面、成功页面及异常页面

    看了前面分享的一篇<什么是真正的程序员?>,觉得自己离这个目标还差的很远,所以要抓紧朝着这个方向前进.作为一名PHP小码农,掌握一种框架是必须的.所以今天开始我们就从国产PHP框架 Thi ...

  4. 极富创意的404错误个性页面设计欣赏

    404错误编码表示服务器找不到指定的页面,这个错误提示页面是可以自定义的,所以很多有创意的人设计了很多有趣的404页面.挑选一些有创意的404错误页面,大家一起来欣赏吧! 字典形式 卡通娃娃来凑趣 清 ...

  5. Tomcat 9.0.6 HostManager页面 403 Access Denied 错误

    版本:Tomcat 9.0.6 问题:访问HostManager页面出现 Access Denied 错误 403 Access Denied You are not authorized to vi ...

  6. Django框架(18.Django中的自定义错误500页面和不存在404页面)

    Django中自定义404页面和500页面 有时访问不存在的页面是时候,并且没有关闭调试模式则会暴露我们的代码 404:找不到页面,关闭调试模式之后,默认会显示一个标准的错误页面,如果要显示自定义的页 ...

  7. 设计友好的错误信息页面

    大多数用户看到"该页无法显示","服务器内部错误"等默认错误提示信息会立马关闭浏览器窗口,我们为什么不能自定义一下呢?让用户从错误信息中得到真正的帮助?    ...

  8. 网站安全狗”响应内容保护“网页错误返回页面优化功能介绍

    网站安全狗最新版本(主程序版本号:3.2.08157)在"资源保护"模块多了一个功能叫做:响应内容保护.如下图所示: <ignore_js_op> 该模块的主要功能是, ...

  9. 页面缓存导致数据错误

    页面缓存导致数据错误 服务端渲染(ssr)会将 API 数据做页面元素返回给前端, 而浏览器会认为是静态页面并将页面缓存, 导致每次访问时都是缓存用户数据. 页面又包含对数据的处理并提交. 当多端更新 ...

最新文章

  1. oracle最大实例数,【Oracle】RAC的多实例数据迁移至单机的多实例。
  2. 取得数组中的随机数random.nextInt(index)
  3. Flutter之Widget、Element、renderObject
  4. 025_CSS框模型概述
  5. Markdown中常用的转义字符
  6. Linux echo命令和查看环境变量实例
  7. [转帖]Sqlcmd使用详解
  8. Postman中几个body请求格式区别及使用说明
  9. Net Core中数据库事务隔离详解——以Dapper和Mysql为例
  10. linux+平均磁盘请求数量_Linux 查看磁盘IO并找出占用IO读写很高的进程
  11. Hexo添加Follow me on CSDN效果
  12. 如何使用Hasu USB to USB Controller Converter刷写tmk固件交换Caps和Ctrl
  13. python等值面追踪_等值线的追踪算法(2)
  14. 我的计算机制作幻灯片在哪,如何制作幻灯片呢?具体的步骤能教教我嘛?
  15. linux phpcms,PHPCMS任意文件下载之exp编写
  16. 股权转让所得个人所得税管理办法(试行)
  17. 【踩坑日记 · 嵌入式 Linux】在香橙派 Zero 2 上编译安装 CH340 驱动(OrangePi Zero 2)
  18. 服务器重启django项目
  19. 谷歌地图的简单轨迹移动播放
  20. C# 互操 调用COM组件

热门文章

  1. moment.js 搜索栏获取最近一周,一个月,三个月,半年,一年时间
  2. 今日学习在线编程题:弓形圆心角
  3. 网络中常用的三种拓扑汇聚技术
  4. 谁在做中国最赚钱的网站
  5. 解决mathtype中Euclid math one花体字字体空白不显示问题
  6. python小游戏——兔鼠大战
  7. 武夷学院计算机网络系统,武夷学院计算机网络王超帅实验报告双绞线的制作与测试.doc...
  8. 解决Adobe Dreamweaver 2020在编程敲代码时又卡又慢延迟的问题(复制黏贴打字都卡)
  9. 《云计算白皮书(2021)》(可下载)
  10. 七、DevOps学习笔记