KSM通过合并相同内存页节省物理内存,适用于虚拟化环境。确认系统支持KSM后,可启动ksm及ksmtuned服务或直接写入/sys/kernel/mm/ksm/run启用。监控pages_shared等参数可评估效果,需权衡CPU开销与内存节约,建议配合ksmtuned优化并持续观察系统稳定性。

KSM(Kernel Same-page Merging)是Linux内核的一项内存优化技术,能够识别多个进程间相同的内存页,并将它们合并为一个只读页,从而节省物理内存。这项技术特别适用于虚拟化环境,比如KVM,多个虚拟机运行相同操作系统或应用时效果明显。启用KSM不需要修改应用程序,完全由内核自动处理。
检查系统是否支持KSM
大多数现代Linux发行版默认已编译KSM支持,可通过以下命令确认:
查看KSM相关内核模块或接口是否存在:
ls /sys/kernel/mm/ksm/如果输出包含如 run、sleep_millisecs、pages_shared 等文件,则说明KSM已支持并可用。
手动启用KSM服务
KSM功能由用户空间服务触发,通常依赖 ksm 和 ksmtuned 服务。
步骤如下:
- 启动KSM服务:
sudo systemctl start ksm - 设置开机自启:
sudo systemctl enable ksm - 如有需要,启动调优服务:
sudo systemctl start ksmtuned
sudo systemctl enable ksmtuned
ksmtuned 会根据当前系统负载动态调整KSM扫描频率,适合生产环境使用。
通过写入接口直接启用KSM
若系统未提供ksm服务,可直接操作sysfs接口手动开启:
- 启用KSM扫描:
echo 1 | sudo tee /sys/kernel/mm/ksm/run - 停止KSM:
echo 0 | sudo tee /sys/kernel/mm/ksm/run
参数说明:
- run = 0:停止扫描和合并
- run = 1:开始扫描内存页
- run = 2:仅合并已有标记页(不推荐普通使用)
监控KSM运行状态
启用后可通过以下文件查看KSM实际效果:
- cat /sys/kernel/mm/ksm/pages_shared:已共享的内存页数
- cat /sys/kernel/mm/ksm/pages_sharing:因共享而节省的页数
- cat /sys/kernel/mm/ksm/pages_unshared:曾被扫描但未共享的页数
- cat /sys/kernel/mm/ksm/sleep_millisecs:扫描间隔时间(毫秒)
例如,将 sleep_millisecs 设小会加快扫描频率,但增加CPU开销。
基本上就这些。KSM在虚拟化场景中能有效减少内存占用,但需权衡CPU使用率。合理配置ksmtuned策略,可在性能与内存节省之间取得平衡。启用后建议持续观察系统表现,确保稳定性不受影响。










