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

    文章

    1309

    浏览量

    39837
  • Linux
    +关注

    关注

    87

    文章

    10986

    浏览量

    206710
  • 服务器
    +关注

    关注

    12

    文章

    8099

    浏览量

    82482
  • 内存
    +关注

    关注

    8

    文章

    2762

    浏览量

    72742
收藏 人收藏

    评论

    相关推荐

    4412开发板 Linux+Qt下根目录空间大小怎么调整

    烧写了Linux+Qt到开发板,想往根目录lib中移植交叉编译好的opencv库和第三方依赖库,发现根目录空间只有300M,而系统占了200M,剩下100M根本不够用。。。在网上查了下好像是用了ramdisk的原因?有没有什么
    发表于 05-22 09:55

    4412开发板如何Linux+Qt下根目录空间大小怎么调整 [

    烧写了Linux+Qt到开发板,想往根目录lib中移植交叉编译好的opencv库和第三方依赖库,发现根目录空间只有300M,而系统占了200M,剩下100M根本不够用。。。在网上查了下好像是用了ramdisk的原因?有没有什么
    发表于 06-21 10:27

    Linux下增加磁盘空间的步骤

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

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

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

    使用Internal VREG和不使用Internal VREG有啥区别

    使用的是64PIN的28035,我想问一下使用Internal VREG和不使用Internal VREG有啥区别什么应用条件下Enable,什么条件下Disable。看了datasheet,还不是很清楚,希望大侠帮忙。谢谢
    发表于 06-11 11:10

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

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

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

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

    你觉得VxWorks与Linux区别是什么

    一、switch中default的作用当其他case不满足时,执行default的内容,防止switch语句报错。二、一个函数两个头文件中重复应该怎么办c++中,可以用命名空间解决;c,只能
    发表于 12-20 07:52

    路由器和交换机的区别

    路由器和交换机的区别:帮忙分析一下我家用交换机还是路由器好建议你用路由器。路由器可以分配网速,还可以开wifi,如果阿姨平时对网速的要求不高,那么你可以给阿姨分配一个使阿姨能够正常使用电脑的网速
    发表于 03-17 11:58

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

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

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

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

    linux与android的区别是什么

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

    Linux和Android有什么区别

    Linux和Android的区别是什么?
    发表于 06-09 09:01 2969次阅读

    嵌入式linux和桌面linux区别

    嵌入式linux和桌面linux区别主要区别是:1. 硬件平台:嵌入式Linux一般是Mips, ARM平台, 桌面
    发表于 10-20 15:36 4次下载
    嵌入式<b class='flag-5'>linux</b>和桌面<b class='flag-5'>linux</b>的<b class='flag-5'>区别</b>

    交换机光口和电口区别

    交换机是一种用于电(光)信号转发的网络设备,它可以为接入交换机的任意两个网络节点提供独享的电信号通路。 交换机的光口和电口的区别在于,光口是用来连接光纤线缆的物理接口,而电口是相对光口
    的头像 发表于 03-20 15:42 364次阅读