当操作系统因为没有足够的内存而将一些虚拟内存写到磁盘就会发生内存交换,内存交换对操作系统中运行的进程是透明的,只有操作系统知道特定的虚拟内存地址是在物理内存还是磁盘上?
虚拟内存写到磁盘上该如何理解?
操作系统通常允许对虚拟内存和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