【发布时间】:2015-05-28 14:21:39
【问题描述】:
我已将 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
当我通过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
在这种情况下,总内存为 62GB,因此其中 4.8% 约为 3GB。我将限制设置为 4GB,此用户上没有运行任何其他进程。
那么谁能给我一些关于这个有问题的python脚本的想法?提前致谢。
【问题讨论】:
-
您的 range(0, 100000000) 是否使用生成器?如果 Python 3 应该已经是生成器,则可以在 Python 2.7 中尝试使用 xrange。只是一个想法,在内存中构建这么大的范围可能是问题的一部分。
-
scipt 结束了吗?也许只是尝试一个无限循环?
-
当我从
range更改为xrange时,%mem 没有增长(或者速度很慢),请您解释一下原因吗? @PaulJoireman -
看看这个问题stackoverflow.com/questions/6317818/…。我把
val = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(200))改成了val = ''.join(random.choice(string.ascii_uppercase + string.digits)) * 1024000,内存成功跨过4G -
您更改了哪些 cgroups 参数,您想在脚本中测试哪些方面?