[Internal testing communication] 内存还剩那么多就去用交换空间是正常的吗
Tofloor
poster avatar
orzorc
deepin
15 hours ago
Author

image.png

还有7G多的内存可用,但是交换空间就已经用了一半了,这是正常的现象吗?还是我需要设置什么调优参数

image.png

Reply Favorite View the author
All Replies
mozixun
Moderator
15 hours ago
#1

调一下swap的使用积极性, 问AI就行, 我电脑也是AMD YES的机器

image.png

Reply View the author
鲜衣怒马
deepin
13 hours ago
#2

试试内存压缩,好处:

1、成熟技术,内核支持的,内存压缩比硬盘swap优先级高,减少磁盘读写,在没超出压缩空间时,不写入swap

2、并且内存压缩比swap快,就算超出了内存压缩容量,也还是会继续写入swap,不会触发OOM kill

3、实测无问题,目前磁盘读写减少很多,不会因为密集IO影响应用流畅度

执行以下几条命令,安装和启用内存压缩

sudo apt update
sudo apt install zram-tools
sudo systemctl restart zramswap

查看使用情况:

命令:zramctl

详情类似下面:
NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lzo-rle 7.7G 1.2G 497.3M 522.9M [SWAP]

Reply View the author
剑风澜
deepin
13 hours ago
#3

呀!你的是小主机啊!

image.png

Reply View the author
鲜衣怒马
deepin
13 hours ago
#4

开zswap吧,参考

看来你的 Ubuntu 24.04 默认把 zswap 关掉了。别担心,要永久开启它,只需要改一下启动引导(GRUB)配置就行。

一、 永久开启 zswap

  1. 编辑配置文件:打开终端,输入 sudo nano /etc/default/grub进入编辑模式。

  2. 添加内核参数:找到 GRUB_CMDLINE_LINUX_DEFAULT这一行,在引号内加上 zswap.enabled=1。建议顺便把压缩算法也配上,推荐用速度快的 lz4或压缩率高的 zstd

    • 修改前:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    • 修改后:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash zswap.enabled=1 zswap.compressor=lz4"
  3. 更新并重启:保存退出后,运行 sudo update-grub,最后重启系统就能生效了。

二、 临时开启(测试用)

如果你只是想先测试一下效果,不想重启,可以用这条命令临时开启:

echo 1 | sudo tee /sys/module/zswap/parameters/enabled

注意,这只是“一次性”的,重启后就会恢复成关闭状态。

三、 验证是否生效

重启完成后,再次运行你刚才的命令:

cat /sys/module/zswap/parameters/enabled

如果输出变成了 Y,就说明 zswap 已经成功运行,开始帮你压缩内存了。

Reply View the author
昨夜的星辰
deepin
12 hours ago
#5

看了一下系统6.18.19内核的配置文件,默认开启了Zswap内存回收器,在内存紧张时自动压缩页面并释放内存

# Memory Management options
#
CONFIG_SWAP=y
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_DEFAULT_ON is not set
CONFIG_ZSWAP_SHRINKER_DEFAULT_ON=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_DEFLATE is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_842 is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4 is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4HC is not set
CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD=y
CONFIG_ZSWAP_COMPRESSOR_DEFAULT="zstd"
CONFIG_ZSMALLOC=y

问了一下AI,各项解释如下

配置项	                                状态	核心作用
CONFIG_SWAP=y	                        启用	开启系统Swap交换分区支持(Zswap依赖基础Swap功能)
CONFIG_ZSWAP=y	                        启用	开启Zswap核心功能:在内存中创建压缩缓存,减少磁盘Swap的IO开销
CONFIG_ZSWAP_DEFAULT_ON is not set	关闭	Zswap默认不自动启用,需手动通过sysfs或内核参数开启
CONFIG_ZSWAP_SHRINKER_DEFAULT_ON=y	启用	默认开启Zswap内存回收器,在内存紧张时自动压缩页面并释放内存
CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD=y	启用	默认使用Zstd作为压缩算法(当前最优的压缩比/性能平衡方案)
CONFIG_ZSMALLOC=y	                启用	启用Zswap专用的内存分配器,优化压缩页面的存储效率

如果CONFIG_ZSWAP_SHRINKER_DEFAULT_ON=y这条和CONFIG_ZSWAP_DEFAULT_ON是平行关系那就不用管了,系统会在内存不足时自动开启zswap

问了一下AI,貌似CONFIG_ZSWAP_SHRINKER_DEFAULT_ON=y是CONFIG_ZSWAP_DEFAULT_ON的子级,默认不开启的话内存回收器也不会启用

不折腾了,因为刚才试了下,开了4个虚拟机+微信+QQ音乐+浏览器70多标签页,系统才开始使用swap分区,日常使用达不到这种程度,所以内存压缩不开对我也基本没影响,内存紧张的可以尝试一下开启试试看效果如何

Reply View the author
LiuYongzhang
deepin
3 hours ago
#6

永久开启 zswap

1. 编辑 GRUB 配置文件

sudo nano /etc/default/grub

找到这一行:GRUB_CMDLINE_LINUX_DEFAULT="原有参数..."

在引号内原有参数后面追加:

zswap.enabled=1 zswap.shrinker_enabled=1

示例修改后:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash zswap.enabled=1 zswap.shrinker_enabled=1"


2. 保存退出

nano 编辑器:

Ctrl+O 保存 → 回车确认 → Ctrl+X 退出


3. 更新 GRUB 生效

sudo update-grub

4. 重启并验证

sudo reboot
Reply View the author