『壹』 【转载】Linux SWAP 深度解读
SWAP,即交换分区或文件,在Linux系统中主要负责内存管理。当系统内存使用紧张时,SWAP会将部分内存中的数据交换到硬盘上的SWAP空间中,以避免系统因内存不足导致崩溃。其工作原理与内存回收紧密相关,内核在监测到内存压力时,会调用shrink_zone()方法进行内存缩减,进而触发SWAP操作。SWAP分区的优先级功能允许在多个SWAP分区存在时,系统在使用SWAP时优先考虑优先级高的分区。SWAP的使用调节通过swappiness参数来控制,该参数定义内核对SWAP的积极程度,数值越高表示更倾向于使用SWAP。kswapd进程则周期性地检测内存使用情况,达到一定阈值时启动内存回收,包括可能的SWAP操作。
水位标记(watermark)是描述内存使用压力的概念,包括high、low、min三种标记,分别表示内存可用性。内存回收行为基于剩余内存的水位标记进行决策,当剩余内存低于low标记时,kswapd开始进行内存回收,直至剩余内存达到high标记停止。min标记则触发直接回收,避免内存使用量过大导致系统崩溃。
zone_reclaim_mode参数用于管理内存区域(zone)内部或外部的内存回收选项,它允许系统选择优先从当前zone内部回收内存还是从其他zone寻找空闲内存。在NUMA架构中,这可以优化内存使用,提高应用性能。min_unmapped_ratio参数表示每个内存区域未映射页数的百分比阈值,当相关区域内存使用达到这个百分比时,才会触发区域内存回收。page-cluster参数控制从SWAP空间读取数据时的预读页数,以提高磁盘读取效率。
SWAP的优先级、水位标记、内存回收策略、NUMA架构下的内存管理以及page-cluster参数等,共同构成了Linux系统的内存管理机制。正确理解和应用这些机制,可以有效优化系统性能,避免内存不足引发的问题。在不同的系统负载下,SWAP的使用策略也应灵活调整,以适应实际需求,确保系统稳定运行。
『贰』 Linux - Swap
首先,swap是硬盘上的一块空间。
其次,当内存没有多余空间的时候,可以将一部分数据交换到swap空间。也就是将内存中的一部分数据放到硬盘中,并释放内存空间。这样,释放出的内存空间就又可以被利用来存储其他数据了。
这样,本来只有4G的内存,如果swap有2G的话,可使用的内存可以认为是6G。
但是,硬盘的速度比内存慢太多太多了。因此swap只是对内存的一种补充,是在内存不足时对内存的扩充,但是不能代替内存使用。
内存不足时, 操作系统 会选择 最久没被使用的内存数据 ,交换到swap空间。
注意,交换操作是由操作系统来进行的。
系统在什么情况或条件下才会使用Swap分区的空间呢? 其实是Linux通过一个参数swappiness来控制的。当然还涉及到复杂的算法。
这个参数值可为 0-100,控制系统 swap 的使用程度。
0告诉内核尽可能的不要将内存数据移到swap中,也即只有在迫不得已的情况下才这么做,而100告诉内核只要有可能,尽量的将内存中不常访问的数据移到swap中。默认值为 60。注意:这个只是一个权值,不是一个百分比值,涉及到系统内核复杂的算法
查看当前系统中swappiness的值
修改当前系统中swappiness的值
上面通过sysctl修改的swappiness值在系统重启后会失效,要想重启后继续生效,需要修改配置文件/etc/sysctl.conf,将下面这行修改成10,如果文件中找不到这行的话,在文件末位加上这行就可以了
既然配置swap对桌面系统有帮助,那么配置多少大小的swap比较合适呢?下面是ubuntu给出的建议:
Linux下有两种类型的swap空间,swap分区和swap文件,他们有各自的特点:
swap分区上面由于没有文件系统,所以相当于内核直接访问连续的磁盘空间,效率相对要高点,但由于swap分区一般安装系统时就分配好了了,后期要缩减空间和扩容都很不方便。
swap文件放在指定分区的文件系统里面,所以有可能受文件系统性能的影响,但据说2.6版本以后的内核可以直接访问swap文件对应的物理磁盘地址,相当于跳过了文件系统直接访问磁盘,不过如果swap文件在磁盘上的物理位置不连续时,还是会对性能产生不利影响,但其优点就是灵活,随时可以增加和移除swap文件。
如果配置有多个swap分区或者文件的话,这里将会有多行,每行代表一个正在被系统使用的swap分区或文件,下面是每个字段的意思:
并不是swap空间占用多就一定性能下降,真正影响性能是swap in和out的频率,频率越高,对系统的性能影响越大,我们可以通过vmstat命令来查看swap in/out的频率
在添加swap分区前,首先得有一个空闲的分区,如果是一块新的磁盘,可以用fdisk来创建一个新的分区用于swap。
添加swap文件就简单多了,也没有分区操作那么有风险。
通过如下命令,能查看所有进程的使用swap情况
查看某个进程swap占用内存大小脚本:
查看所有进程使用swap情况脚本:
『叁』 Linux swap分区必需要建立吗 详细�0�3
Linux 把物理内存划分作称为分页(Page)的内存区块。内存交换是一个内存分页被复制到一个预配置的称为 swap 空间的硬盘空间里的过程,以此来释放内存分页。物理内存与这个 swap 空间的共同大小称为可用的虚拟内存量。 在这里,保留 swap分区有两个重要的原因。 其一,当物理内存不足以支撑系统和应用程序(进程)的运作时,这个 swap 空间可以用作临时存放使用率不 用程序(进程)使用。 再有,即使你的机器拥有足够多的物理内存,也有一些程序会在它们初始化时残留的极少再用到的内存分页内 容转移到 swap 空间,以此让出物理内存空间。对于有发生内存泄漏几率的应用程序(进程),swap 空间更是 重要,因为谁也不想看到由于物理内存不足导致系统崩溃。 如果你需要在 Ubuntu 下跑虚拟机或者常用休眠(Hibernate),推荐划分 swap 空间。 如果在使用过程中想要清空 swap 空间,可以先禁用 swap,然后再次启用。以 Ubuntu为例, sudo swapoff -a sudo swapon -a 通过系统监视器,例如 gnome-system-monitor,你就可以看到 swap 空间的内容被转移到了物理内存中。 可能也许你不习惯把一个分区留给 swap,那么也可以使用一个文件作为 swap 空间,设置方法如下。但是这样 确实不如 swap 分区的性能来得好。 打开控制台,创建一个 512MB 的文件用作 swap: sudo dd if=/dev/zero of=/mnt/512Mb.swap bs=1M count=512 格式化这个 swap 文件作为内存交换设备: sudo mkswap /mnt/512Mb.swap 添加这个 swap 文件到系统: sudo swapon /mnt/512Mb.swap * 要在开机时就使用这个 swap 文件,需要编辑配置文件: gksudo gedit /etc/fstab * 在 /etc/fstab 最末加入这一行: 重启即可生效。
『肆』 【转载】Linux SWAP 深度解读
Linux SWAP深度解读如下:
1. SWAP的基本功能: SWAP,即交换分区或文件,在Linux系统中负责内存管理。 当系统内存使用紧张时,SWAP会将部分内存中的数据交换到硬盘上的SWAP空间中,以避免系统因内存不足导致崩溃。
2. SWAP的工作原理: 与内存回收紧密相关,内核在监测到内存压力时,会调用shrink_zone方法进行内存缩减,进而触发SWAP操作。 kswapd进程周期性地检测内存使用情况,达到一定阈值时启动内存回收,包括可能的SWAP操作。
3. SWAP的使用调节: 通过swappiness参数来控制,该参数定义内核对SWAP的积极程度。 数值越高,表示系统更倾向于使用SWAP。 SWAP分区的优先级功能允许在多个SWAP分区存在时,系统优先考虑优先级高的分区进行SWAP操作。
4. 内存使用压力与回收策略: 水位标记描述内存使用压力,包括high、low、min三种标记。 当剩余内存低于low标记时,kswapd开始进行内存回收,直至剩余内存达到high标记停止。 min标记则触发直接回收,避免内存使用量过大导致系统崩溃。 zone_reclaim_mode参数用于管理内存区域内部或外部的内存回收选项,优化内存使用。 min_unmapped_ratio参数表示每个内存区域未映射页数的百分比阈值,达到此阈值时触发区域内存回收。
5. 提高磁盘读取效率: pagecluster参数控制从SWAP空间读取数据时的预读页数,以提高磁盘读取效率。
6. SWAP与系统性能优化: 正确理解和应用SWAP的优先级、水位标记、内存回收策略等机制,可以有效优化系统性能。 在不同的系统负载下,SWAP的使用策略应灵活调整,以适应实际需求,确保系统稳定运行。