增大虚拟内存
# 产看虚拟内存文件位置
swapon -s
# 修改虚拟内存文件
sudo swapoff /swapfile
sudo rm /swapfile
sudo if=/dev/zero of=/tmp/swapfile bs=1M count=4096
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo free -h
# 配置开机挂载
sudo vim /etc/fstab
# /swapfile swap swap defaults 0 0
释放buff/cache内存
sudo sh -c 'echo 1 > /proc/sys/vm/drop_caches'
sudo sh -c 'echo 2 > /proc/sys/vm/drop_caches'
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
修改OOM Killer配置
# 在触发 OOM 后立刻触发 kernel panic,kernel panic 10秒后自动重启系统。
# sysctl -w vm.panic_on_oom=1
vm.panic_on_oom = 1
# sysctl -w kernel.panic=10
kernel.panic = 10
# echo "vm.panic_on_oom=1" >> /etc/sysctl.conf
# echo "kernel.panic=10" >> /etc/sysctl.conf
# 从上面的 oom_kill.c 代码里可以看到 oom_badness() 给每个进程打分,根据 points 的高低
# 来决定杀哪个进程,这个 points 可以根据 adj 调节,root 权限的进程通常被认为很重要,不应该
# 被轻易杀掉,所以打分的时候可以得到 3% 的优惠(adj -= 30; 分数越低越不容易被杀掉)。我们可
# 以在用户空间通过操作每个进程的 oom_adj 内核参数来决定哪些进程不这么容易被 OOM killer 选
# 中杀掉。比如,如果不想 MySQL 进程被轻易杀掉的话可以找到 MySQL 运行的进程号后,调整
# oom_score_adj 为 -15(注意 points 越小越不容易被杀):
ps aux | grep mysqld
# mysql 2196 1.6 2.1 623800 44876 ? Ssl 09:42 0:00 /usr/sbin/mysqld
cat /proc/2196/oom_score_adj
# 0
echo -15 > /proc/2196/oom_score_adj
# 当然,如果需要的话可以完全关闭 OOM killer(不推荐用在生产环境):
sysctl -w vm.overcommit_memory=2
# echo "vm.overcommit_memory=2" >>