【随笔】内存 & I/O检测相关
缺页中断
缺页中断属于内部中断,也就是异常。细分的话属于异常中的故障。
在执行一条指令时,如果发现他要访问的页没有在内存中(存在位为0),那么停止该指令的执行,并产生一个页不存在异常,对应的故障处理程序可通过从外存加载加载该页到内存的方法来排除故障,之后,原先引起的异常的指令就可以继续执行,而不再产生异常。
主缺页中断 --> 要从磁盘读取数据而产生的中断
次缺页中断 --> 数据已经被读入内存并被缓存起来,从内存缓存区中而不是直接从硬盘中读取数据而产生的中断
time 命令可以用来查看某程序第一次启动的时候产生了多少主缺页中断和次缺页中断:
/usr/bin/time -v date

buffer和cache
可以用查看服务器物理内存和文件缓存区的情况:

其中:
MemTotal --> 物理总内存
MemFree --> 可用内存
Buffers --> 磁盘缓存
Cached --> 文件缓存区
磁盘缓存(Buffers),又称磁盘快取,实际上就是将下载到的数据先保存于系统为软件分配的内存空间中(这个内存空间被称之为"内存池"),当保存到内存池中的数据达到一个程度时,便将数据保存到硬盘中。这样可以减少实际的磁盘操作,有效的保护磁盘免于重复的读写操作而导致的损坏。
文件缓存区(Cached),将文件相关数据缓存到文件缓存区中,以便需要的时候调用
从文件缓存区读取页要比硬盘内读取页快得多,所以Linux内核将尽量调用次缺页中断来直接从文件缓存区中读取数据,而不是通过主缺页中断来读取,这样一来,当系统运行了一段时间后,可能会发现即使运行了很少的几个进程,文件缓存区依然越变越大,只有当物理内存已经不够使用时,才会通过守护进程释放掉一些页。所以当发现系统可用内存月来越小时,也许就是由于内核将数据缓存到文件缓存区导致的。
内存页面类型
Linux中内存页面主要有三种类型:
1、Read pages,只读页(或代码页),那些通过主缺页中断从硬盘读取的页面,包括不能修改的静态文件、可执行文件、库文件等。当内核需要它们的时候把它们读到内存中,当内存不足的时候,内核就释放它们到空闲列表,当程序再次需要它们的时候需要通过缺页中断再次读到内存。
2、Dirty pages,脏页,指那些在内存中被修改过的数据页,比如文本文件等。这些文件由 pdflush 负责同步到硬盘,内存不足的时候由 kswapd 和 pdflush 把数据写回硬盘并释放内存。
3、Anonymous pages,匿名页,那些属于某个进程但是又和任何文件无关联,不能被同步到硬盘上,内存不足的时候由 kswapd 负责将它们写到交换分区并释放内存。
SWAP交换分区
当系统没有足够物理内存来应付所有请求的时候就会用到 swap 设备,swap 设备可以是一个文件,也可以是一个磁盘分区。不过要小心的是,使用 swap 的代价非常大。如果系统没有物理内存可用,就会频繁 swapping,如果 swap 设备和程序正要访问的数据在同一个文件系统上,那会碰到严重的 IO 问题,最终导致整个系统迟缓,甚至崩溃。
swap 设备和内存之间的 swapping 状况是判断 Linux 系统性能的重要参考,我们可以用很多工具来监测 swap 和 swapping 情况,比如:top、cat /proc/meminfo、vmstat 等。
【随笔】内存 & I/O检测相关的更多相关文章
- [转载]浅谈C/C++内存泄漏及其检测工具
http://dev.yesky.com/147/2356147_3.shtml 对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题.已经有许多技术被研究出来以应对这个问题,比如Sm ...
- C/C++内存泄漏及检测 转
C/C++内存泄漏及检测 2011-02-20 17:51 by 吴秦, 30189 阅读, 13 评论, 收藏, 编辑 “该死系统存在内存泄漏问题”,项目中由于各方面因素,总是有人抱怨存在内存泄漏, ...
- [转]浅谈C/C++内存泄露及其检测工具
转自:http://www.cnblogs.com/taoxu0903/archive/2007/10/27/939261.html 对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问 ...
- Android内存泄漏的检测流程、捕捉以及分析
https://blog.csdn.net/qq_20280683/article/details/77964208 Android内存泄漏的检测流程.捕捉以及分析 简述: 一个APP的性能,重度关乎 ...
- 【内存泄漏】 C/C++内存泄漏及其检测工具
对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题.已经有许多技术被研究出来以应对这个问题,比如 Smart Pointer,Garbage Collection等.Smart Po ...
- C/C++内存泄露及检测工具
内存泄漏的定义 一般我们常说的内存泄漏是指堆内存的泄漏.堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显示释放的内 存.应用程序一般使用malloc,re ...
- CPP-基础:内存泄露及其检测工具
[转]浅谈C/C++内存泄露及其检测工具 对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题.已经有许多技术被研究出来以应对这个问题,比如 Smart Pointer,Garba ...
- iOS内存泄漏自动检测工具PLeakSniffer
新款objective-C内存泄漏自动检测工具 PLeakSniffer , GitHub地址 (https://github.com/music4kid/PLeakSniffer). 背景 前些天读 ...
- qt 关于内存泄漏的检测
Qt 关于内存泄露的检测: 收藏人:guitarhua 2012-02-10 | 阅: 转: | 来源 | 分享 Qt 关于内存泄露的检测:工具篇 ...
随机推荐
- linux -小记(1) 问题:"linux ifconfig查看网卡名称与配置文件不否" 或 启动网卡提示“ eth0 似乎不存在, 初始化操作将被延迟”。
"linux ifconfig查看网卡名称与配置文件不否" 或 启动网卡提示" eth0 似乎不存在, 初始化操作将被延迟" . 问题 1. service n ...
- phoenix与spark整合
目的是将phoenix做存储,spark做计算层.这样就结合了phoenix查询速度快和spark计算速度快的优点.在这里将Phoenix的表作为spark的RDD或者DataFrames来操作,并且 ...
- wordpress google字体和gravatar头像不显示问题处理
wordpress 安装好后,发现网站打开很慢. 查看原因后发现是因为总所周知的原因:google字体无法加载.gravatar头像无法加载. 在网上查了下,说是要把google字体加载连接修改下,和 ...
- Difference between applicationContext.xml and spring-servlet.xml in Spring Framework
Question: Are applicationContext.xml and spring-servlet.xml related anyhow in Spring Framework? Will ...
- [Toolchain]arm-none-linux-gnueabin编译
http://blog.sina.com.cn/s/blog_a000da9d0101436p.html
- Hbase预分区种子生成
提前生成Hbase预分区种子,在创建Hbase表时也进行相应的预分区,同时设置预分区的个数,预分区的范围对应Hbase监控页面的Region Server的start key与End key,从而使数 ...
- archlinux 传统方法编译内核linux kernel 3.3.7
From: http://hi.baidu.com/flashgive/item/eaef6326b5eb73d3a417b662 archlinux中传统方法编译内核 1)下载内核以及补丁并解压: ...
- 2016-07-15: Window定时器使用
windows下定时器使用实例 #include <iostream> #include <Windows.h> using namespace std; void Timer ...
- 在Linux下给mysql创建用户并分配权限及问题解决方案
在linux下安装mysql请参考在linux系统中安装mysql服务器详细步骤 1.新建用户 //登录MYSQL @>mysql -u root -p @>密码 //创建用户 mysql ...
- 百度地图API示例之设置地图显示范围
代码 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" cont ...