你是否需要SWAP分区呢?

本文探讨了Linux系统中的SWAP分区,解释了其作用和工作原理,以及如何通过swappiness参数进行调整。文章指出,SWAP分区对于系统休眠至关重要,但在某些情况下可能会降低性能,特别是在低速磁盘上。建议根据内存大小和系统需求来决定是否创建SWAP分区。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

072252_lxF3_1582989.jpg

一、查看Linux系统当前的分区情况:

>free -m

简单来说,SWAP 交换分区是用来存放内存溢出来的数据。我们可以将内存想像成一个盆子,运行程序时的数据都被作为水放在内存这个盆子当中。如果你运行太多的应用程序,导致水过多而(内存这个)盆子已经装不下时,就会将多于部分的水装到 SWAP 交换分区当中。


从理论上讲,SWAP 交换分区增大了可以使用的内存空间,但事实并非如此。因为内存的数据交换速度是非常快的,而 SWAP 交换分区是把物理磁盘当成内存的载体,也就是说:虽然使用 SWAP 可以让我们运行更多或更大的应用程序了,但物理磁盘的数据交换速度远比不上物理内存,因此也就可能造成运行性能的下降。而对硬盘特别是 SSD 磁盘的频繁读写,也会造成磁盘寿命的缩短和性能下降。


其实,我们可以把 SWAP 交换分区比喻成 Windows 中的 pagefile 页面文件,但两者在技术实现上仍有许多差异。


SWAP优先级

SWAP 交换分区会将内存中较少使用的数据移到磁盘当中,从而将更多的内存空间腾出来给其它的重要应用,也就是说:内存中较少使用的数据会被移动 SWAP 分区。


“较少使用”其实取决于“swappiness”阈值,在 Linux 中其实是一个可配置项。较高在 swappiness 值意味着数据更有可能被移到 SWAP 分区,较低的 swappiness 表示数据不太可能被移到 SWAP 分区。


SWAP与Linux休眠

最后还有一点需要注意:Linux 系统休眠的数据是存储到 SWAP 交换分区中的,也就是说如果系统没有配置 SWAP 交换分区,在 Linux 上是无法进行休眠的。


你是否需要SWAP分区呢?


你有必要为自己的 Linux 划一个 SWAP 分区吗?SWAP 交换分区对你来说是必要的吗?

绝对不是! Linux 系统不配置 SWAP 也可以运行得很好,是否需要划分 SWAP 分区也有如下几个优缺点:


优点:内存用完时,提供更多运行空间

可以休眠


缺点:SWAP对磁盘的占用设定好之后是固定的,无法动态调整

增加了磁盘的读写次数和损耗几率

不一定提高性能(详细解释见下文)


SWAP起反作用的情况

开启 SWAP 交换分区也并非问题能提升 Linux 性能,在某些情况下使用 SWAP 可能比不使用更糟。

如果你在一台1GB内存和5400转硬盘的上网本上安装了 Linux,只需要多打开几个浏览器标签并多开几个应用就会造成内存占完而开始使用 SWAP 交换分区。由于硬盘只有5400转,随后便开始出现性能瓶颈。这是因为硬盘转速太慢,而又有大量的数据需要访问到 SWAP 交换分区,所以会造成机器越来越慢。在此时,我们通常需要重启系统来完全清除 SWAP 的内容。


关于SWAP的建议

  • 如果你需要 Linux 休眠功能,那么当然就要划分 SWAP 分区。该分区一般为你内存大小外加 10-25%

  • 如果你的内存小于4GB,并且希望得到小的性能提升(至少7200转磁盘),可以划分一个交换分区

  • 如果你的磁盘转速小于7200转,建议不要划分 SWAP 交换分区


更改Swappiness

我们可以直接在 /etc/sysctl.conf 文件中对 swappiness 值进行编辑,在该文件中找到 vm.swappiness 并对其值进行更改(最好是10),如果你没找到这个参数,可以直接在文件末尾添加:

# vm.swappiness=10

该值主要表示我们希望 Linux 从内存与 SWAP 分区进行数据交换的强度,值为 10 则表示当内存占用到 90% 时开始将数据写入 SWAP。Ubuntu 的默认 swappiness 值为 60,这表示当内存占用到 40% 时开始将数据写入 SWAP。


080044_jERo_1582989.png

[root@AY140716161543837722Z etc]# cat sysctl.conf

# Kernel sysctl configuration file for Red Hat Linux

#

# For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and

# sysctl.conf(5) for more details.


# Controls IP packet forwarding

net.ipv4.ip_forward = 0


# Controls source route verification

net.ipv4.conf.all.rp_filter=0

net.ipv4.conf.default.rp_filter=0


# Do not accept source routing

net.ipv4.conf.default.accept_source_route = 0


# Controls the System Request debugging functionality of the kernel

kernel.sysrq = 0


# Controls whether core dumps will append the PID to the core filename.

# Useful for debugging multi-threaded applications.

kernel.core_uses_pid = 1


# Controls the use of TCP syncookies

net.ipv4.tcp_syncookies = 1


# Disable netfilter on bridges.

net.bridge.bridge-nf-call-ip6tables = 0

net.bridge.bridge-nf-call-iptables = 0

net.bridge.bridge-nf-call-arptables = 0


# Controls the default maxmimum size of a mesage queue

kernel.msgmnb = 65536


# Controls the maximum size of a message, in bytes

kernel.msgmax = 65536


# Controls the maximum shared segment size, in bytes

kernel.shmmax = 68719476736


# Controls the maximum number of shared memory segments, in pages

kernel.shmall = 4294967296


# Disable IPv6

net.ipv6.conf.all.disable_ipv6 = 1

net.ipv6.conf.default.disable_ipv6 = 1


# Determines how often to check for stale neighbor entries.

net.ipv4.neigh.default.gc_stale_time=120


# Using arp_announce/arp_ignore to solve the ARP Problem

net.ipv4.conf.default.arp_announce = 2

net.ipv4.conf.all.arp_announce=2

vm.swappiness = 0

net.ipv4.tcp_max_tw_buckets = 5000

net.ipv4.tcp_max_syn_backlog = 1024

net.ipv4.tcp_synack_retries = 2

net.ipv4.conf.lo.arp_announce=2

[root@AY140716161543837722Z etc]#


转载于:https://my.oschina.net/ajian2014/blog/301733

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值