如何实现内存密集型python脚本进行测试

Jud*_*ing 6 python memory cgroups

我已经将cgroups规则应用于特定用户,并且我想测试从上述用户运行的程序的内存是否已按预期限制.我尝试使用以下脚本:

import string
import random

if __name__ == '__main__':
    d = {}
    i = 0;
    for i in range(0, 100000000):
        val = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(200)) # generate ramdom string of size 200
        d[i] = val
        if i % 10000 == 0:
            print i
Run Code Online (Sandbox Code Playgroud)

当我通过ps命令监视进程时,结果是%MEM增加到4.8并且当两个cgroups服务打开和关闭时从未改变:

$ ps aux | grep mem_intensive.py
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
jason    11531 88.5  4.8 3312972 3191236 pts/0 R+   22:16   0:07 python mem_intensive.py
Run Code Online (Sandbox Code Playgroud)

在这种情况下,总内存为62GB,因此其中4.8%约为3GB.我将限制设置为4GB,而不在此用户上运行任何其他进程.

那么有谁能让我对这个有问题的python脚本有所了解?提前致谢.

Pau*_*man 0

range在内存中构造一个列表,然后循环遍历该列表,xrange创建一个生成器,它是一个对象,它像序列一样为循环提供数据,但不会在内存中构建该序列。range对于短范围来说和之间没有什么区别xrange,但是对于大范围来说有显着差异,引用Python文档:https ://docs.python.org/2/library/functions.html#xrange

在 Python 3 中, 提供的功能xrange成为内置范围的默认功能。由于这一点,以及xrangePython 2 固有的内存优势,我已经看到 Python 2 到 3 兼容层在底层 映射了range要调用的 Python 2 函数。xrange