1.先确认是不是内存 OOM 被杀
dmesg -T | grep -i killed
如果输出类似:
Out of memory: Killed process xxx (tessent_shell)就是内存不够被系统强杀,完全符合你判断。
2.方案 1:给 zhangsan 调高 OOM 优先级(最简单、零风险)
Linux 有
oom_score_adj,数值 -1000 ~ 1000
- 越小:越不容易被 OOM 杀掉
- 越大:内存不够时最先被干掉
1. 给 zhangsan 用户所有进程设为最优先
编辑
/etc/security/limits.conf不行,要用 systemd 全局默认 + 用户固定 oom 权重临时对当前已有进程生效
找到 tessent_shell 进程 PID:
ps -ef | grep tessent_shell
假设 PID=12345
echo -500 > /proc/12345/oom_score_adj
3.永久:所有 zhangsan 登录进程默认高优先级 zhangsan的uid未1112
mkdir -p /etc/systemd/system/user@1112.service.d
cat > /etc/systemd/system/user@1112.service.d/oom-priority.conf << EOF
Service
OOMScoreAdjust=-900
EOF
systemctl daemon-reload
4.再把系统内核参数设置好(保证系统不崩)
echo "vm.oom_kill_allocating_task = 0" >> /etc/sysctl.conf
echo "vm.min_free_kbytes = 41943040" >> /etc/sysctl.conf
sysctl -p
- zhangsan 的 tessent_shell → OOM 优先级 -900(系统最后才会杀他)
- 其他用户 → 保持默认,内存不够优先杀他们
- 系统永远保留 40GB 空闲内存 → 不崩溃、不卡
5.限制其他普通用户内存(把内存留给 zhangsan)
vim /etc/security/limits.conf
普通用户:最大锁定物理内存 128GB 足够日常作业
* soft memlock 134217728
* hard memlock 134217728
普通用户:单进程虚拟内存上限 512GB,防止乱起大进程吃光1T内存
* soft as 536870912
* hard as 536870912
===================== 专属给 zhangsan =====================
跑Tessent仿真:内存锁定、进程地址空间 全部无限制
zhangsan soft memlock unlimited
zhangsan hard memlock unlimited
zhangsan soft as unlimited
zhangsan hard as unlimited