首页 > 解决方案 > 捕获“MemoryError”后如何继续消耗内存

问题描述

我正在开发一个压力测试工具。其目的是消耗所有空闲内存。我的问题是不断地吃掉所有空闲内存,即使在脚本执行期间释放了一些空闲内存,尤其是在 MemoryError 被捕获之后。

我尝试使用 pass 或 continue 语句来处理“MemoryError”异常,但这无济于事。如果发生 MemoryError,脚本不会消耗新释放的内存。可能是由于某些操作系统限制而发生的。

def mem_cons(x):
timestamp()
a = []
idx = 0
appender = a.append
MEGA_STR = 'F' * (10 ** 4 * x)
try:
    while True:
        try:
            idx += 1
            if idx > 10000:
                if 'kill' in flag:
                    print("")
                    timestamp()
                    print("Memory consumption was remotely stopped.\nPlease use \'ctrl+c\' command to exit")
                    a = []
                    timestamp()
                    print("Memory was cleared")
                    break
                idx = 0
            appender(MEGA_STR)
        except MemoryError:
            continue
            timestamp()
except KeyboardInterrupt:
    print("")
    timestamp()
    print("Program has been stopped")

设想:

实际结果:

在那之后,整个内存消耗水平仍然在 94.9% 并且没有增长(正如我们在图表中看到的- 在红线之后)

预期结果:

脚本继续消耗手动释放的内存,并在 MemoryException 被捕获后将其级别保持在 100%。

提前致谢!

标签: linuxpython-2.7out-of-memory

解决方案


推荐阅读