ulimit -S -v 设置虚拟内存软限制,允许临时突破但不超过硬限制,为大型进程预留弹性空间;需先查当前限制,单位KB,临时设置会话级生效,永久配置需修改/etc/security/limits.conf并重登录。

直接用 ulimit -S -v 设置虚拟内存软限制,核心是给大型进程留出弹性空间——软限制可临时突破(只要不超过硬限制),避免因瞬时内存申请被粗暴 kill,同时又不放任无节制增长。
确认当前限制并计算目标值
先查清现状:
ulimit -S -v 查软限制,ulimit -H -v 查硬限制。
单位统一为 KB。比如想给 Java 或 Python 大模型服务预留 8GB 缓冲区,就设为 8388608(8 × 1024 × 1024)。
临时设置软限制(会话级生效)
在启动大型进程前执行:
ulimit -S -v 8388608
这样该 shell 启动的所有子进程(包括你的服务程序)都会继承这个软上限。注意:它不能超过当前硬限制;若硬限制太低,需先提权调整:
sudo ulimit -H -v 8388608
永久设置用户级软限制
编辑 /etc/security/limits.conf,添加两行(以用户 appuser 为例):
appuser soft as 8388608
appuser hard as 10485760
其中 as 是 address space 的缩写,等价于 -v;硬限制略高于软限制,为突发需求留余量。保存后需重新登录或重启服务进程才生效。
验证与注意事项
启动进程后,可用 cat /proc/$(pidof your_app)/limits | grep "Max address space" 直接查看该进程实际生效的虚拟内存限制。
关键提醒:
• ulimit 只管虚拟内存(AS),不管物理内存 RSS;真正吃满 RAM 还得靠 cgroup 或 systemd 的 MemoryMax
• 某些容器环境或 systemd 服务会绕过 limits.conf,此时需在 service 文件中显式写 LimitAS=8G
• -m(常驻内存)在多数现代发行版中已弃用或不可靠,坚持用 -v


















