合 Linux中的交换分区(swap)
Tags: LinuxOS优化swap交换空间交换分区swappiness虚拟内存
简介
Linux
将物理内存分为内存段,叫做页面。交换是指内存页面被复制到预先设定好的硬盘空间(叫做交换空间)的过程,目的是释放这份内存页面。物理内存和交换空间的总大小是可用的虚拟内存的总量。
什么是swap?
swap 空间是磁盘上的一块区域,可以是一个分区,也可以是一个文件。所以具体的实现可以是 swap 分区也可以是 swap 文件。当系统物理内存吃紧时,Linux 会将内存中不常访问的数据保存到 swap 上(换出),这样系统就有更多的物理内存为各个进程服务,而当系统需要访问 swap 上存储的内容时,再将 swap 上的数据加载到内存中(换入),这就是常说的换出(swap out)和换入(swap in)。
Swap 的优缺点
优点
1、对于小内存的服务器,可以提高服务器的稳定性!!!
交换空间可以在一定程度上缓解内存不足的情况,但是它需要读写磁盘数据,所以性能不是很高,但是却可以提高系统的稳定性。
- swap是Linux下的虚拟内存,设置适当的swap可增加服务器稳定性
- 建议swap容量在真实内存容量的1.5倍左右,若您的服务器内存大于4GB,可设1-2GB的固定值
2、暂存不常用的数据
对于一些大型的应用程序(如LibreOffice
等),在启动的过程中会使用大量的内存,但这些内存很多时候只是在启动的时候用一下,后面的运行过程中很少再用到这些内存。有了 swap
之后,系统就可以将这部分不怎么使用的内存数据保存到 swap
上去,从而释放出更多的物理内存供系统使用。
3、休眠功能需要使用swap
很多发行版(如ubuntu
)的休眠功能依赖于 swap
分区,当系统休眠的时候,会将内存中的数据保存到 swap
分区上,等下次系统启动的时候,再将数据加载到内存中,这样可以加快系统的启动速度,所以如果要使用休眠的功能,必须要配置 swap
分区,并且大小一定要大于等于物理内存在某些情况下,物理内存有限,但又想运行耗内存的程序怎么办?这时可以通过配置足够的 swap
空间来达到目标,虽然慢一点,但至少可以运行。
4、在某些情况下,物理内存有限,但又想运行耗内存的程序怎么办?这时可以通过配置足够的swap空间来达到目标,虽然慢一点,但至少可以运行。
5、虽然大部分情况下,物理内存都是够用的,但是总有一些意想不到的状况,比如某个进程需要的内存超过了预期,或者有进程存在内存泄漏等,当内存不够的时候,就会触发内核的OOM killer,根据OOM killer的配置,某些进程会被kill掉或者系统直接重启(默认情况是优先kill耗内存最多的那个进程),不过有了swap后,可以拿swap当内存用,虽然速度慢了点,但至少给了我们一个去debug、kill进程或者保存当前工作进度的机会。
6、如果看过Linux内存管理,就会知道系统会尽可能多的将空闲内存用于cache,以加快系统的I/O速度,所以如果能将不怎么常用的内存数据移动到swap上,就会有更多的物理内存用于cache,从而提高系统整体性能。
缺点
swap
是存放在磁盘上的,磁盘的速度和内存比较起来慢了好几个数量级,如果不停的读写 swap
,那么对系统的性能影响是非常大的,尤其是当系统内存很吃紧的时候,读写 swap
空间发生的频率会很高,导致系统运行很慢,像死了一样,这个时候添加物理内存是唯一的解决办法。
由于系统会自动将不常用的内存数据移到swap上,对桌面程序来说,有可能会导致最小化一个程序后,再打开时小卡一下,因为需要将swap上的数据重新加载到内存中来。
到底要不要swap?
上面介绍了什么是swap以及它们的优缺点,那么到底要不要配置swap呢?答案是:看情况。
下面分别讨论内存不够用、内存勉强够用和内存很充裕这三种情况下服务器和桌面环境对swap的选择。
用了内存90%,就开始使用swap有什么好处?
好处就是不会发生OOM,程序不会蹦,系统稳定性高了,坏处就是可能会影响系统性能