内存交换区

当操作系统因为没有足够的内存而将一些虚拟内存写到磁盘就会发生内存交换,内存交换对操作系统中运行的进程是透明的,只有操作系统知道特定的虚拟内存地址是在物理内存还是磁盘上?

虚拟内存写到磁盘上该如何理解?

操作系统通常允许对虚拟内存和io进行一些控制,我们提供过一些gun/linux上控制它们的办法,最基本的办法是修改/proc/sys/vm/swappiness为一个很小的值,比如0或1,这告诉内核除非虚拟内存完全满了,否则不要使用交换区,下面是如何检查这个值得例子

cat /proc/sys/vm/swappiness

这个值显示为60,这是默认的设置(范围0-100,如果我设置比100大会如何),对服务器而言这是个很糟糕的默认值,这个值只对笔记本使用,服务器应该设置为0

另一个选项是修改引擎怎能么读取和写入数据。例如,使用innodb_flush_method=o_direct

另一个选项是使用mysql的memlock配置项,可以把mysql锁定在内存,这可以避免交换,但是也可能带来危险,如果没有足够的可锁定内存,myqsql在尝试分配更多内存时会崩溃,这也可能导致锁定的内存太多而没有足够的内存留给操作系统

内存交换区

时间: 2024-11-05 23:46:42

内存交换区的相关文章

Linux 下释放内存,swap交换区缓存

关于内存耗尽的总结: 1)在进程收到OOM之前,内核将刷新文件系统的cache来释放空间. 2)将交换区的页面移到磁盘上. 3)当内存变少时,虚拟性使每个进程通过交换区来做简单的上下文环境切换. 4)当进程消耗尽交换内存后,才会引发out-of-memory(OOM)来kill那些进程. 所以,我们还是有必要来手动进行Linux下释放内存的操作,其实也就是释放缓存的操作了. 要达到释放缓存的目的,我们首先需要了解下关键的配置文件/proc/sys/vm/drop_caches.这个文件中记录了缓

[Linux]创建和启用Swap交换区

如果你的服务器的总是报告内存不足,并且时常因为内存不足而引发服务被强制kill的话,在不增加物理内存的情况下,启用swap交换区作为虚拟内存是一个不错的选择,我购买的DigitalOcean VPS 512M内存基本不够用的,好在VPS的母鸡使用的SSD,正常读写速度都在300MB/s以上,启用swap后性能提高了不少,特别是在处理消耗大内存的脚本方面 创建交换区原则:1.创建的swap交换区大小应该大于实际物理内存的容量大小,但是不要过大,以免造成硬盘空间浪费.2.如果内存IO请求频繁,而单一

揭开Linux操作系统的Swap交换区之谜

Swap,即交换区,除了安装Linux的时候,有多少人关心过它呢?其实,Swap的调整对Linux服务器,特别是Web服务器的性能至关重要.通过调整Swap,有时可以越过系统性能瓶颈,节省系统升级费用. Swap的原理是一个较复杂的问题,需要大量的篇幅来说明.在这里只作简单的介绍,在以后的文章中将和大家详细讨论Swap实现的细节. 众所周知,现代操作系统都实现了“虚拟内存”这一技术,不但在功能上突破了物理内存的限制,使程序可以操纵大于实际物理内存的空间,更重要的是,“虚拟内存”是隔离每个进程的安

VMware 虚拟机Red Hat 5.9 交换区及硬盘空间调整

首先要通过VMware设置简单实现内存扩大.但是系统中的/swap应该如何设置呢? 1. 创建swap 文件 使用如下命令: #dd if=/dev/zero of=/swap/swapfile bs=1M count=3072  dd命令作用是用指定大小的块拷贝一个文件,并在拷贝同时进行指定的转换. 语法:dd [选项] if =输入文件(或设备名称). of =输出文件(或设备名称). ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数. skip = blocks 跳过读

物理内存、页面文件、交换区和虚拟内存

物理内存,顾名思义,就是实实在在存在的那个东西,插在你电脑主板上的内存条所提供的空间. 页面文件,这个是硬盘上的一块空间,在Windows下表现为一个文件.这个页面文件存在的意义就是在物理内存被占用满以后,将物理内存中的东西移动到硬盘上的这个空间,腾出物理内存给需要的应用程序来使用. 交换区,这个是物理内存和页面文件空间的总和,"交换"的含义,则是指在硬盘文件.CPU和其它IO之间进行数据的传递和暂存(这句话对于了解计算机运行基本流程的人来说应该可以理解). 虚拟内存,这个概念恐怕是目

C语言内存四区的学习总结(二)---- 堆区

接上篇,内存四区的分析-静态区,下面来说明一下堆区总结. 堆区分析: 堆区(heap):一般由程序员分配释放(动态内存申请与释放),若程序员不释放,程序结束时可能由操作系统回 就下面的程序: #include "stdio.h" #include "string.h" char *getMem(int size) { char *p = NULL; p = (char *)malloc(sizeof(char) * size); if(p == NULL) retu

深入理解数据类型、变量类型属性、内存四区和指针

数据类型可理解为创建变量的模具(模子):是固定内存大小的别名. 数据类型的作用:编译器预算对象(变量)分配的内存空间大小. 既能读又能写的内存对象,称为变量:若一旦初始化后不能修改的对象则称为常量. 变量本质:(一段连续)内存空间的别名. 内存四区 栈区(stack):也叫临时区,由编译器自动分配释放,存放函数的参数值,局部变量的值等. 堆区(heap):一般由程序员分配释放(动态内存申请与释放),若程序员不释放,程序结束时可能由操作系统回收. 全局区(静态区)(static):全局变量和静态变

c语言内存四区模型

c语言内存四区模型:代码区,全局区(常量区),栈区,堆区 在全局区(常量区),两个字符串完全一样c++编译器只会定义一份 char * getBuf() { char buf[20]; strcpy(buf, "abcde"); return buf; } abcdX?  有乱码! 确实把内存地址返回了,但不能用 被调函数调用完毕,在临时区分配的内存统统消失 char *buf= (char *)malloc(sizeof(char)*20); 手动malloc申请一份内存,由程序员手

攻城狮在路上(叁)Linux(二十五)--- linux内存交换空间(swap)的构建

swap的功能是应付物理内存不足的状况,用硬盘来暂时放置内存中的信息. 对于一般主机,物理内存都差不多够用,所以也就不会用到swap,但是对于服务器而言,当遇到大量网络请求时或许就会用到. 当swap被使用的时候,主机的硬盘灯就会闪烁不停. 本篇介绍两种方式:1.设置一个swap分区   2.创建一个虚拟内存的文件. 一.使用物理分区构建swap: 1.首先是分区: A.fdisk /dev/sda; <== 根据后续提示创建一个分区. B.修改分区的ID,因为fdisk默认将分区的ID作为文件