MemoryError会导致python刷新其缓存吗?

时间:2017-07-31 21:55:08

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

我刚看到机器上发生了MemoryError,我注意到服务器上的可用缓存在此之后急剧增加。当错误被抛出时,Python是否有某种方式触发内存管理任务?或者这可能由服务器(Linux / CentOs)管理?

1 个答案:

答案 0 :(得分:1)

MemoryError并未特别以导致此情况发生的方式处理,并且没有其他例外,但是:

  1. 异常会展开堆栈,并且在异常处理完成时,通常会释放在引发异常和捕获异常时在堆栈中引用的对象(在处理期间,异常回溯往往会创建阻止的循环引用)发生清理)
  2. MemoryError继承自BaseException,而不是Exception,因此不太可能被" generic" except Exception:块,意味着更多堆栈层被解开并最终被释放
  3. CPython循环垃圾收集器determines when to run collections based on the number of allocations and deallocations that have occurred;如果大堆栈展开会释放大量对象,如果它足以触发集合,则可能会释放更多对象
  4. 所有这些都增加了释放内存的几率,但没有一个特定于MemoryError;如果您点击Ctrl-C并触发KeyboardInterrupt,则可以观察到相同的行为。更有可能的是,您正在看到Python退出,或者Linux正在通过转储其缓存来响应极端内存请求;在转储缓存后,MemoryError将来以试图满足大内存请求,特别是如果请求是针对内存块的多个连续请求而不是单个巨大请求。