Linux性能:为什么要添加交换空间swap?

我知道Linux内核使用交换空间而不是RAM内存会显着降低性能。那么,既然有足够的可用内存,删除交换空间不是更好吗?

简短的回答是不。相反,启用交换空间具有性能优势。即使Linux服务器有足够的内存,Linux服务器在长时间运行后也会经常使用交换空间。

本教程介绍了为什么需要添加交换空间swap、使用swap交换空间的优点、不使用交换空间时的这些差异和缺点、使用内存和交换空间时如何选择、了解使用交换空间的性能影响,以及如何配置vfs_cache_pressure和swappiness。

请确认以下数据。这个数据是一个月后从实时聊天服务器获得的。以下数据来自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此处的数据显示使用了308米的交换空间。运行Swapping检查时,没有正在进行交互式空间I/O或未使用的活动。

此外,kswap服务不会占用太多CPU时间。使用Top命令按CPU时间排序的查询顶级进程中也找不到kswap进程。为了确认Kswap进程是否在使用中。此外,还验证了使用PS命令和通过grep过滤输出。

Ps -A | grep kswap

40?00:00:29 kswapd0

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

使用swap交换空间的优点

Linux系统使用swap是很正常的事情。Linux内核将很少使用的内存页面移动到交换空间中,从而为经常使用内存页面的进程提供更多的缓存空间。

如果内核需要不断地将内存页面移动和移动到内存和交换空间swap中,交换空间的使用可能会成为性能问题。

另一个优点是交换空间swap使管理员能够解决低内存问题。我们经常注意到服务器运行缓慢,登录时使用了很多交换空间。如果没有交换,内存不足会引起更突然、更严重的连锁反应。

因此,最好将交换空间设置为最大进程大小。例如,MySQL在my.cnf中配置的内存。建议交换空间或交换空间的大小不要比总内存稍大。如果你能对此提出正当理由,这可能是你的选择。

但是,服务器很少出现这种情况,因此必须在交换空间对应用程序的影响之间取得平衡。交换空间不会更改服务器所需的内存总量。旨在提高系统性能。

一般来说,Linux内核会将很少使用的内存页面移动到交换空间中,即使有足够的可用内存RAM。

为了能够缓存常用数据,建议您替换一段时间内不活动的内存页面。这可能发生在服务器最空闲的时候。这是Linux内核目标要做的事情。另外,不要将交换空间设置得太大。否则,性能问题、中断或响应时间可能会增加。

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

上面说的是你有足够的可用内存。但是,实际情况经常发生在内存不足的时候。如果服务器内存不足,在内存使用量最大的时间段内,交换空间会频繁使用,并且会大幅增加。

如果内存不足,并且没有交换空间,则这通常会导致无法为需要更多内存的进程分配内存。作为最后一种手段,内核部署了OOM杀手,完成了MySQL和Java等内存使用过程。

有关Linux交换空间Swap的详细信息,请参阅Linux内核文档中的管理交换空间和回收页面框架文档。如果交换空间使用量始终为零,则有大量可用内存RAM。在这种情况下,建议删除交换空间。

一般来说,交换空间I/O性能不好。如果Linux服务器有大量可用内存RAM,则必须调整或禁用交换空间。禁用交换空间会在服务器突然需要内存时导致更多响应时间不足,OOM杀手可以在不等待的情况下杀死消耗大量内存的进程。

内核缓存压力和交换空间

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

Vfs_cache_pressure控制用于缓存页面和索引节点对象的内核回收内存的频率。默认值为100。建议设置为50到200。

Swappiness这个值定义核心交换记忆体页面的频率。较高的值会经常使用交换空间,因此可能会影响Linux服务器性能。值越低,交换空间的使用频率越低。默认值为60。建议设置在1到60之间。

如果需要更改Vfs_cache_pressure和swappiness的值,可以使用所需的编辑器打开/etc/sysctl.conf文件。在本教程中,您将使用vim打开文件。

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服务器有大量可用内存,可以尝试将swappiness和vfs_cache_pressure修改为以下值:

Vm.swappiness=10

Vm.vfs_cache_pressure=50

这样可以减少缓存压力。缓存有助于性能,因此希望将缓存中存储的数据保留在内存中更长的时间。如果缓存变大,则希望减少交换空间的使用,从而减少磁盘I/O。

可以使用以下cat命令查看swappiness和vfs_cache_pressure的当前值。

Sudo cat /proc/sys/vm/swappiness

sudo cat/proc/sys/VM/VFS _ cache _ pressure

要在不重新启动Linux服务器的情况下临时启用和设置swappiness和vfs_cache_pressure值,请运行以下sysctl命令:

Sudo sysctl -w vm.swappiness=10

sudo sysctl-w VM . VFS _ cache _ pressure=50

结论

请务必了解在Linux上使用交换空间与不使用交换空间之间的区别。交换空间可以延长响应时间并提高Linux服务器性能。要知道在交换空间和内存使用之间可以选择。如果有问题,请反馈给留言。

Performance

Swap

内存。

Linux

LINUX

Htop替代btop

2022-9-22 11:01:07

LINUX

可用内存和可用内存之间的差异

2022-9-22 12:01:20

搜索