Linux将物理RAM
内存分割成不同的内存块,我们把这个块叫做页page
。而交换swapping这个动作发生在将一页内存拷贝到提前配置好的硬盘区域,这块区域就叫交换区swap space
,以此来释放内存页的占用。物理内存+交换区=可用虚拟内存大小。
优点
swapping交换有两个存在的必要:
- 当系统需要比可用物理内存更大的空间时,内核换出一些用完的页,以此给当前这个应用分配更多的内存。
- 有的程序初始化的时候回用到大量的页,但是后来这些空间都不再使用了。内核会把这些页换出,以此为其他需要的程序(或者是硬盘缓存
disk cache
)提供内存。
缺点
但是,交换区也会有出问题的时候。与内存相比,磁盘读写是比较慢的。一般内存速度以纳秒计,而磁盘需要到毫秒,所以访问磁盘会很慢。当交换越多,系统也就越慢(因为在读写磁盘)。
当一个交换变慢,交换动作变多,会进入恶性循环,越交换系统越慢可用内存越少越需要交换。这种时候系统忙于寻找可用内存以此来保证应用运行。这种情况下,只能增加RAM配置。加机器加配置大法好!
Linux中有两种交换区:
- 交换分区 硬盘中一个单独的区域,仅供交换使用,其他文件无法访问
- 交换文件 一种特殊的系统、应用文件
使用swapon -s
可查看当前的交换区状况:
|
|
可通过fdisk
管理交换分区。
- 先确保分区已标记为交换分区
- 然后创建文件区
多大合适?
如果RAM够大,理论上可以不需要交换区。但是内存用尽的时候系统会崩溃。
老版本的Unix系统需要物理内存的2-3倍配置。现代系统实现不需要那么多。大致原则如下:
- 桌面系统,配置两倍于物理内存的大小,这种情况允许我们启动一些大应用(空闲的时候内存可以被换出),这样对使用中的应用的RAM使用更有效。
- 服务端,配置一半于物理内存的大小,这样当需要更多内存的时候可以更灵活换出。但是同时也需要进行监控,必要时升级RAM。
结论
管理好交换区是系统管理很重要的一点。好的规划与正确使用,可以有更好的效果。当然配置不是固定的,要敢于测试使用,动态调整自己的配置策略。