对Python,Golang和C++三种语言GC机制的简单调查

调查背景

在公司一项任务是需要调用Python的SDK爬取相关的数据信息,数据的量在10亿这个量级,故不能够一下子得到结果。
这个程序运行十来天的可能性比较大,但是问题来了,程序跑过一阵子(1小时)之后爬取效率明显降低。
重启之后效率恢复,这就让人有点不爽了,本来数据量就多,用初速度爬取也需要十来天,这样一减速得爬到什么时候呢?
通过使用top工具,观察到爬虫脚本在运行过程中占用的内存从800MB上升到了1.4GB,速度也随内存占用量的上升而减慢。(图片来自MacOS的top,与程序的运行环境中的top不太一样)

我猜可能是内存泄漏了,各种查资料之后用python的gcobjgraph进行程序内存使用情况分析。
虽然针对于爬虫程序的分析无果,但是对GC机制有了一点兴趣,于是稍微了解了一下。

下文的 GC 既指 Garbage Collection, 也指 Garbage Collector。

接触Python一年多,Golang九个月,C++是大一时OOP课上教授的语言。其实都只是了解了皮毛,仅仅停留在“会用”这个层面。

阅读更多