捕获“ MemoryError”后如何继续消耗内存

时间:2019-02-06 15:42:45

标签: linux python-2.7 out-of-memory

我正在开发压力测试工具。其目的是消耗所有可用内存。我的问题是,即使在脚本执行期间(尤其是在捕获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")

场景:

  • 脚本占用了20%到100%的内存
  • MemoryException被捕获
  • 可以手动释放一些内存,例如-5.1%

实际结果:

此后,整个内存消耗水平仍为94.9%,并且没有增长(如红线之后的graph所示)

预期结果:

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

谢谢!

0 个答案:

没有答案