虚拟内存是Linux系统中至关重要的组成部分,它通过将部分磁盘空间作为扩展内存来增强系统性能。以下是详细的调优和优化方法:
首先需要了解几个核心参数: - swappiness (0-100):控制内核将内存页交换到swap空间的倾向 - vfs_cache_pressure (百分比):控制内核回收用于目录和inode缓存的内存的倾向 - dirty_ratio/dirty_background_ratio:控制脏页写回磁盘的阈值
# 查看当前swappiness值
cat /proc/sys/vm/swappiness
# 临时修改(重启失效)
sudo sysctl vm.swappiness=10
# 永久修改
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
建议值: - 桌面系统:10-30 - 服务器:1-10 - 数据库服务器:1-5或0(完全禁用)
# 查看当前值
cat /proc/sys/vm/vfs_cache_pressure
# 修改(默认100)
sudo sysctl vm.vfs_cache_pressure=50
降低此值会使内核更倾向于保留目录和inode缓存,对文件密集型应用有益。
# 查看当前设置
cat /proc/sys/vm/dirty_ratio
cat /proc/sys/vm/dirty_background_ratio
# 修改(示例值)
sudo sysctl vm.dirty_ratio=20
sudo sysctl vm.dirty_background_ratio=10
解释:
- dirty_background_ratio
:系统内存中脏页达到此百分比时,后台进程开始写回
- dirty_ratio
:系统内存中脏页达到此百分比时,应用程序写操作会被阻塞
对于某些工作负载(特别是数据库),禁用透明大页可能提高性能:
# 查看THP状态
cat /sys/kernel/mm/transparent_hugepage/enabled
# 禁用THP
echo "never" | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
# 调整OOM killer行为(负值表示不易被杀死)
echo -17 > /proc/[PID]/oom_adj
# 创建4GB的swap文件
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 永久生效
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
# 设置swap优先级(更高的优先级会被优先使用)
sudo swapon -p 100 /swapfile
对于内存有限的系统:
# 启用zswap(需要内核支持)
echo 1 | sudo tee /sys/module/zswap/parameters/enabled
# 或设置zram
sudo modprobe zram num_devices=1
echo lz4 | sudo tee /sys/block/zram0/comp_algorithm
echo 2G | sudo tee /sys/block/zram0/disksize
sudo mkswap /dev/zram0
sudo swapon /dev/zram0 -p 100
定期监控虚拟内存使用情况:
# 基础监控
free -h
vmstat 1
top
# 详细监控
sudo apt install sysstat
sar -r 1 3 # 内存使用统计
sar -S 1 3 # swap使用统计
# 查看页面缓存
cat /proc/meminfo
通过以上方法,您可以根据具体应用场景优化Linux系统的虚拟内存使用,提高系统整体性能和稳定性。