ulimit -s -v 限制脚本虚拟内存的核心目标是防止单个脚本无节制申请地址空间,避免因内存压力触发内核频繁回收页缓存,从而维持系统响应能力;单位为kb,需区分软硬限制,永久配置通过/etc/security/limits.conf设置as值,验证需检查/proc/pid/limits。

用 ulimit -S -v 限制脚本虚拟内存,核心目标不是“保护缓存”,而是防止单个脚本无节制申请地址空间,间接避免因内存压力触发内核频繁回收页缓存(page cache),从而维持系统响应能力。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
先确认当前限制和单位
执行:ulimit -S -v — 查软限制(KB)ulimit -H -v — 查硬限制(KB)
若显示 unlimited,说明没设上限;单位始终是 KB,比如 4GB = 4194304。
临时设置:在运行脚本前加限制
确保限制生效范围覆盖脚本及其所有子进程:ulimit -S -v 4194304 && ./your_script.sh
或分步写成:ulimit -S -v 4194304./your_script.sh
注意:软限制不能超过当前硬限制;若不够,需 root 权限临时提硬限:sudo sh -c 'ulimit -H -v 4718592; exec su - $USER'
永久配置(按用户或服务)
编辑 /etc/security/limits.conf,添加两行(以用户 deploy 为例):deploy soft as 4194304deploy hard as 4718592
其中 as 是 address space 缩写,等价于 -v;硬限略高,留出安全余量。
保存后需重新登录或重启 PAM 会话(如 SSH 重连)才生效。
验证是否真正起作用
启动脚本后,查其实际生效值:pid=$(pgrep -f "your_script.sh"); cat /proc/$pid/limits | grep "Max address space"
输出应显示类似:Max address space 4194304 4718592 bytes
关键提醒:
• 它管的是虚拟地址空间(AS),不等于物理内存(RSS),也不直接保护 page cache
• 真正想稳住缓存,得配合 vm.swappiness=1、vm.vfs_cache_pressure 调优,或用 cgroup v2 限 RSS
• systemd 服务请改用 LimitAS=4G 写入 .service 文件,更可靠










