当Linux系统出现"Out of memory"错误时,表示系统内存资源已耗尽,内核无法为进程分配所需内存。这通常会导致进程被终止或系统变得不稳定。
free -h
top
htop
vmstat 1 5
dmesg | grep -i "out of memory"
dmesg | grep -i "killed process"
journalctl -k | grep -i "oom"
ps aux --sort=-%mem | head -n 10
终止占用内存过多的进程:
kill -9 [PID]
清理缓存:
sync; echo 1 > /proc/sys/vm/drop_caches
检查现有交换空间:
swapon --show
free -h
创建交换文件:
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
永久生效(添加到/etc/fstab):
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
查看当前OOM killer设置:
cat /proc/sys/vm/overcommit_memory
cat /proc/sys/vm/overcommit_ratio
修改设置(0-允许overcommit, 1-不允许, 2-基于比例):
sudo sysctl vm.overcommit_memory=1
永久生效:
echo 'vm.overcommit_memory=1' | sudo tee -a /etc/sysctl.conf
限制特定进程的内存使用:
systemctl set-property [service_name] MemoryMax=2G
使用cgroups限制内存:
cgcreate -g memory:/limited_group
cgset -r memory.limit_in_bytes=1G limited_group
调整swappiness(0-100, 默认60):
sudo sysctl vm.swappiness=10
调整vfs_cache_pressure(默认100):
sudo sysctl vm.vfs_cache_pressure=50
监控系统:
定期维护:
硬件升级:
应用优化:
通过以上措施,可以有效解决和预防Linux系统中的"Out of memory"问题。