You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制Python程序物理内存占用,使其优先使用交换内存?

限制Python程序物理内存至4G并优先使用交换内存(Ubuntu 20.04)

针对你的需求,在Ubuntu 20.04上可以通过以下几种方式实现:

方法1:用ulimit临时限制(会话级)

ulimit可以快速限制当前终端会话内进程的物理内存占用,操作简单:

  • 先在终端执行:
    ulimit -m 4194304
    
    这里的4194304是4G对应的KB数(410241024),-m参数专门限制进程的常驻物理内存(RSS)。
  • 接着在同一个终端启动你的Python程序:
    python3 your_script.py
    
  • 说明:当程序物理内存占用触达4G上限后,系统会自动将超出的内存页转存到swap分区,不会直接终止进程。但这个限制只对当前终端会话有效,关闭终端后就失效了。

方法2:用prlimit单独管控进程(更灵活)

prlimit可以精准针对单个进程设置内存限制,无需影响整个终端会话:

  1. 启动程序时直接设置:
    prlimit --rss=4G:4G python3 your_script.py
    
    --rss=4G:4G表示将物理内存的软、硬限制都设为4G,软限制是进程会收到警告的阈值,硬限制是绝对上限。
  2. 给已运行的进程加限制:
    • 先通过ps aux | grep python3找到目标Python进程的PID;
    • 然后执行:
      prlimit --rss=4G:4G -p <你的进程PID>
      

方法3:用cgroup v2实现持久化限制

如果需要长期固定这个内存限制,或者要管理多个进程,cgroup v2是更合适的方案(Ubuntu 20.04默认支持):

  1. 创建专属的cgroup内存控制组:
    sudo mkdir -p /sys/fs/cgroup/memory/python_mem_limit
    
  2. 设置该组的物理内存上限为4G:
    sudo bash -c 'echo 4G > /sys/fs/cgroup/memory/python_mem_limit/memory.max'
    
    memory.max参数控制该组内进程能使用的最大物理内存,超出后系统会自动使用swap。
  3. 将Python进程加入这个控制组:
    • 启动程序时直接加入:
      sudo cgexec -g memory:/python_mem_limit python3 your_script.py
      
    • 给已运行的进程加入:
      sudo bash -c 'echo <你的进程PID> > /sys/fs/cgroup/memory/python_mem_limit/cgroup.procs'
      
  4. 说明:cgroup的配置会保留到系统重启,若要开机自动生效,可以把上述设置命令写入/etc/rc.local或者创建一个systemd服务。

额外注意点

  • 先确认你的swap分区已正常挂载并可用,用free -h命令即可查看swap的使用状态;
  • 当程序频繁使用swap时,运行速度会明显变慢——这是磁盘IO远慢于物理内存的正常现象,若对性能有要求,可能需要优化程序本身的内存占用;
  • 如果你的Python程序会创建子进程,ulimit和prlimit的限制会被子进程继承,cgroup则会统一管控组内所有进程的总内存占用。

内容的提问来源于stack exchange,提问作者ToughMind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 02:42:48