0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在Linux上使用和不使用交换空间的区别

CHANBAEK 来源:myfreax 作者:myfreax 2022-12-05 16:59 次阅读

我们知道Linux内核使用交换空间而不是RAM内存的时候会严重降低性能。那么,有人可能会问,既然我有足够多的可用内存,删除交换空间不是更好吗?

简短的回答是不会。反而启用交换空间会带来性能优势。即使您的Linux服务器有足够多的可用内存,您也会经常发现Linux服务器长时间运行后会使用交换空间。

在本教程中,我们将说明为什么你应该添加交换空间swap,使用swap交换空间的优点,在不使用交换空间时将有那些区别与缺点。

如何在内存和交换空间使用上作出取舍,理解频繁使用交换空间带来的性能影响。

如何配置vfs_cache_pressure与swappiness值,应优先调整内存回收速度,如何确定频繁使用交换空间。

交换空间是否降低Linux性能

请查看以下数据,该数据是从运行一个月后的实时聊天服务器获取的。以下数据来自free命令的结果。

total        used        free      shared  buff/cache   available
Mem:           3.7G        1.0G        445M         84M        2.2G        2.2G
Swap:          1.8G        308M        1.5G

free -h

这里的数据显示使用了308M的交换空间。当我运行swapping检查时,没有迹象表明进行或不合时宜使用交互空间I/O的活动。

除此之外kswap服务并没有消耗太多CPU时间。使用top命令按CPU时间排序的查找顶级进程中也找不到kswap进程。

为了确认kswap进程是否繁忙。我们还使用了ps命令并通过grep过滤输出来确认。

所以在这种情况下,swap使用不会降低Linux服务器的性能。现在,让我们看看交换空间实际上如何改善Linux服务器性能。

ps -A | grep kswap
40 ? 00:00:29 kswapd0

使用swap交换空间的优点

Linux系统使用一些swap是正常的事,也是一件好事。Linux内核会将几乎从未使用过的内存页面移动到交换空间中,以确保内存为更频繁使用内存页面的进程提供更多可用的缓存空间。

当内核被迫不断地将内存页面移入和移出内存和交换空间swap时,交换空间使用会成为一个性能问题。

另一个优点是交换空间swap让管理员有时间对低内存问题做出反应。我们经常会注意到服务器运行缓慢,并且在登录时会注意到大量使用交换空间。如果没有交换空间,内存不足会产生更加突然和严重的连锁反应。

所以我们会建议将交换空间设置为您最大进程的大小。比如mysql在my.cnf中配置的内存。

有些人建议不要使用交换空间或交换空间大小略大于总内存。如果您能为此提出正当理由,那么这可能是您的选择。

但是,这在服务器上几乎不是这种情况,您应该在交换空间对您的应用程序的影响之间取得平衡。交换空间不会改变服务器所需的内存总量。它旨在改善系统的性能。

总的来说,即使仍有足够多可用的内存RAM,Linux内核也会将几乎从未使用过的内存页面移动到交换空间。

换出一段时间不活动的内存页面,将经常使用的数据保留在缓存中,这发生在服务器最空闲的时候。

这是Linux内核该做的事。也避免将交换空间设置得过大,否则会导致性能问题、中断或响应时间加长。

交换空间与不使用交换空间区别

上面所说是你有足够多可用内存。但实际情况是我们经常会遇到内存不够用的时候。

当您的服务器没有足够的内存时,在内存需求高峰期间,交换空间将被频繁使用并且明显增多。

如果您没有足够的内存并且没有交换空间,这通常会导致无法为需要更多内存的进程分配内存。

作为最后的手段,内核将部署OOM杀手来终止高内存使用的进程,比如MySQL、Java

要更详细地了解Linux交换空间Swap,请阅读Linux内核文档中的交换空间管理和Page Frame回收文档。

如果您的交换空间已使用始终为0,那么您确实有大量空闲可用的内存RAM,在这种情况下,删除交换空间可能是最好的。

总的来说交换空间I/O的性能很差。如果Linux服务器确实有大量空闲可用的内存RAM,则应调整或禁用交换空间。

禁用交换空间后,当服务器急剧需要内存时,将缺少更多的反应时间,OOM可能会不等你反应过来,就将消耗大量内存的进程杀死。

内核缓存压力和交换空间

假设您已启用交换空间。可以考虑按照以下教程调整服务器的缓存压力和交换空间的swappiness值。

vfs_cache_pressure控制内核回收内存的频率,用于缓存页面和inode对象。默认值是100。我们推荐设置50到200。

swappiness此值用于定义内核交换内存页面的频繁程度。较高的值会导致频繁使用交换空间,从而影响Linux服务器性能。

较低的值会减少使用交换空间的频率。默认值是60,我们推荐设置1到60之间。如果你需要改变vfs_cache_pressureswappiness的值。

请使用你喜欢的编辑器打开etc/sysctl.conf文件。在本教程中我们将使用vim打开文件。添加或替换vm.swappinessvm.vfs_cache_pressure值。

sudo vim etc/sysctl.conf
vm.swappiness=10
vm.vfs_cache_pressure=200

例如,如果您在内存不足时,您可以尝试将swappiness值设置为10,vfs_cache_pressure的值设置200。

这将会使内存回收变得更快,增加内存缓存压力。我们知道缓存对性能有好处,快速的内存回收会适得其反。

但是与过于频繁的使用交换空间相比,增大vfs_cache_pressure值会更好一点。

因此,不在内存中保留尽可能多的缓存将有助于减少使用交换空间的频率。此外,将vm.swappiness设置为10,将减少交换空间的使用。

假如你的Linux服务器在具有大量空闲可用的内存,你可以尝试将swappinessvfs_cache_pressure修改为以下值。

vm.swappiness=10
vm.vfs_cache_pressure=50

这将降低缓存压力。由于缓存对性能有好处,我们希望将缓存数据在内存中保留更长时间。由于缓存会变大,我们仍然希望减少交换空间的使用,从而降低磁盘I/O。

你可以使用以下cat命令查看swappinessvfs_cache_pressure的当前值:

sudo cat /proc/sys/vm/swappiness
sudo cat /proc/sys/vm/vfs_cache_pressure

如果你要在不重新启动Linux服务器的情况下临时启用并设置swappinessvfs_cache_pressure的值,请运行以下sysctl命令:

sudo sysctl -w vm.swappiness=10
sudo sysctl -w vm.vfs_cache_pressure=50

结论

至此,你应该了解在Linux上使用和不使用交换空间的区别,在使用交换空间时你将获得更多反应时间与更好的Linux服务器性能。

如何在交换空间和内存的使用上作出取舍,如你有任何疑问,请在评论反馈。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内核
    +关注

    关注

    3

    文章

    1362

    浏览量

    40216
  • Linux
    +关注

    关注

    87

    文章

    11219

    浏览量

    208872
  • 服务器
    +关注

    关注

    12

    文章

    9010

    浏览量

    85160
  • 内存
    +关注

    关注

    8

    文章

    2996

    浏览量

    73867
收藏 人收藏

    评论

    相关推荐

    如何在Ubuntu Linux释放/boot分区中的空间

    Ubuntu Linux,/boot分区是用于存储启动相关的文件的。随着时间的推移,这个分区可能会变满,导致系统无法安装新的内核和更新。本文将介绍如何释放/boot分区中的空间,并
    的头像 发表于 11-28 10:04 844次阅读

    Linux下增加磁盘空间的步骤

    在给Linux分区时,总是有那么一点吝啬,给的空间较小。使用过程中,装上Matlab等大型软件后,才蓦然发现磁盘已没有空间,不过亡羊补牢为时不晚。Warning:对硬盘分区很危险,要
    发表于 07-11 08:42

    Linux用户空间与内核空间区别

    为的分为两个部分--用户空间与内核空间。用户空间地址分布从0到3GB(PAGE_OFFSET,0x86中它等于0xC0000000),3GB到4GB为内核
    发表于 06-05 04:35

    电路交换与分组交换区别是什么?

    电路交换与分组交换区别是什么?
    发表于 05-18 06:55

    串口使用DMA与不使用DMA有什么区别

    什么是DMA?DMA的意义是什么?串口使用DMA与不使用DMA有什么区别?Stm32如何实现串口DMA传输?
    发表于 12-07 07:30

    Linux与其他操作系统的区别

    Linux与其他操作系统的区别 Linux与其他操作系统的区别  Linux可以与MS-DOS、OS/2、Windows等其他操作系统共存
    发表于 01-18 12:42 1653次阅读

    什么是空间数据交换中心

    什么是空间数据交换中心 空间数据交换中心是指对不同范围、领域的空间信息及其元数据进行有效管理、给信息需求 者提供空间数据
    发表于 06-17 07:40 982次阅读

    自由空间交换,自由空间交换是什么意思

    自由空间交换,自由空间交换是什么意思 自由空间交换是利用自由
    发表于 03-20 10:28 1260次阅读

    Linux中限制用户空间

    2007-05-10 17:06:53 分享到: Linux中限制用户的磁盘使用空间使用的是Quota,一般Quota安装Linux时就
    发表于 11-07 10:20 0次下载

    Linux系统内存类型交换空间详解

    学习如何修改你的系统交换空间的容量,以及你到底需要多大的交换空间
    的头像 发表于 02-02 17:31 4578次阅读
    <b class='flag-5'>Linux</b>系统<b class='flag-5'>上</b>内存类型<b class='flag-5'>交换</b><b class='flag-5'>空间</b>详解

    概述Linux创建或扩展交换分区的三种方法

    有时候在你安装后摇升级 RAM 的时候需要增加一点交换分区的空间,比如你要将你的系统的 RAM 从 1GB 升级到 2GB 你,那么你就不得不将你的交换分区空间也升级一下(从 2GB
    发表于 04-25 14:38 830次阅读

    核心交换机、汇聚交换机与普通交换机的区别介绍

    核心交换机并不是交换机的一种类型,放在核心层(网络主干部分)的交换机叫核心交换机。汇聚层交换机,是多台接入层
    发表于 03-19 14:50 1.2w次阅读

    linux与android的区别是什么

    linux与android有什么区别?有以下三点区别
    发表于 05-26 09:41 2161次阅读
    <b class='flag-5'>linux</b>与android的<b class='flag-5'>区别</b>是什么

    核心交换机和普通交换机的区别

    核心交换机和普通交换机的区别? 核心交换机(Core Switch)是网络中的重要组成部分,与普通交换机(Regular Switch)有许
    的头像 发表于 12-07 14:39 1626次阅读

    交换机cpu和交换芯片的关系及区别

    交换机CPU和交换芯片在交换机中各自扮演着重要的角色,并且它们之间存在一定的关系与区别
    的头像 发表于 03-18 14:06 1649次阅读