在 Linux 中限制Python程序所能使用的最大内存

开发 前端
如果程序开发不当,可能会出现占用过多内存的情况。特别是在Docker里面,如果Python程序占用太多内存,可能会导致Docker容器死掉。

[[390136]]

如果程序开发不当,可能会出现占用过多内存的情况。特别是在Docker里面,如果Python程序占用太多内存,可能会导致Docker容器死掉。

为了限制Python程序所能使用的最大内存,我们可以使用Python自带的resource模块。

首先获取系统默认的内存soft上限和hard上限:

  1. import resource 
  2. soft, hard = resource.getrlimit(resource.RLIMIT_AS) 

其中的resource.RLIMIT_AS实际上就是数字5,表示内存资源。而soft限制是一个可以调节的内存使用上限,hard是一个一旦设定就很难动态调整的内存使用量上限。

在我的电脑上运行效果如下图所示:

一开始soft和hard的值是一样的。并且它们的单位不是比特。而是比比特还小的单位。我的电脑是8GB内存,而8 * 1024 ^ 6 正好约等于这里的hard和soft的值。

接下来,设置当前运行的这个Python程序能够使用的最大内存:

  1. resource.setrlimit(resource.RLIMIT_AS, (最大上限, hard)) 

其中最大上限是一个整数。假设我想限制当前程序最多可以使用500MB的内存,那么这里的最大上限可以设置为:

  1. 0.5 * 1024 ^ 6 = 576460752303423488 

所以设置为:

  1. resource.setrlimit(resource.RLIMIT_AS, (576460752303423488, hard)) 

那么当前Python程序使用的内存超过500MB以后,程序就会抛出MemoryError。

 

最后,这些代码只能在Linux系统上正常工作。Windows和Mac上可能会有问题。

 

责任编辑:武晓燕 来源: 未闻Code
相关推荐

2021-01-14 22:23:16

Python开发内存

2021-01-15 06:54:54

Python内存程序

2010-09-25 09:56:46

JVM最大内存

2018-03-16 14:04:45

Linux大内存页虚拟内存管理

2021-09-05 06:00:47

电脑内存Windows

2020-11-26 10:25:09

FedoraPodmanLinux

2009-09-07 09:20:34

2019-12-16 10:43:38

Linux内存消耗进程

2017-02-06 18:42:37

Linuxgdb程序

2009-10-22 13:06:00

Linux磁盘管理

2018-10-08 10:02:52

LinuxWondershape网络带宽

2010-03-10 10:40:38

Python插件

2020-06-22 07:58:02

Linux命令时间限制

2010-11-08 10:07:23

SQL Server内

2018-05-31 11:58:06

Linux进程Early OOM

2017-11-01 13:42:13

LinuxDOSFreeDOS

2020-02-09 17:23:17

Python数据字典

2020-06-17 14:10:01

Python内存程序

2009-06-16 15:20:48

ApplicationJSP程序

2021-07-29 09:07:44

React视图库Web 开发
点赞
收藏

51CTO技术栈公众号