相关疑难解决方法(0)

Python中的内存泄漏Twisted:它在哪里?

我有一个负载的Twisted服务器.当服务器负载不足时,内存使用量会增加,并且永远不会回收(即使没有更多客户端).下次进入高负载时,内存使用量再次增加.这是当时情况的快照:

  • RSS内存为400 MB(通常最大客户端数应为200 MB).
  • gc.garbage是空的,因此没有无法收集的对象.
  • 使用objgraph.py显示没有明显的泄漏候选者(正常,健康过程和泄漏过程之间没有显着差异).
  • 使用pympler显示Python对象使用的几十MB(仅限)(主要是dict,list,str和其他本机容器).
  • 泄漏检查=完全启用的Valgrind没有显示任何重大泄漏(只有几个MB"最终丢失") - 因此C扩展不是罪魁祸首.总内存也不会与顶部显示的400MB +相加:

    ==23072== HEAP SUMMARY:
    ==23072== in use at exit: 65,650,760 bytes in 463,153 blocks
    ==23072== total heap usage: 124,269,475 allocs, 123,806,322 frees, 32,660,215,602 bytes allocated

我能找到的唯一解释是垃圾收集器不会跟踪某些对象,因此它们不会被objgraph和pympler显示,而是使用大量的RAM.

我还有哪些其他工具或解决方案?通过使用sys.getobjects,在调试模式下编译Python解释器会有帮助吗?

python garbage-collection memory-leaks memory-management twisted

13
推荐指数
1
解决办法
2267
查看次数