Python 内存增加和程序退出

Python 内存增加和程序退出,python,linux,ubuntu,linux-kernel,Python,Linux,Ubuntu,Linux Kernel,我正在编写一个python程序,当我测试它时,在最初的20分钟内,它工作得很好,然后突然内存消耗从1G增加到6G以上,然后就没有错误了。我猜它可能会被内核杀死,因为内存和交换都已满。 这是我的问题,1。我怎么知道它为什么退出? 2.我能知道为什么它突然消耗了这么多内存吗? 代码有800多行,我不知道哪部分可以简化,所以我没有把它粘贴在这里。 基本上,程序只是一个大循环,对不同的数据做相同的事情 这是它崩溃前的最后一刻 我不知道为什么VIRT突然变得这么高,但在这之前,也有一些奇怪的现象,因为整个

我正在编写一个python程序,当我测试它时,在最初的20分钟内,它工作得很好,然后突然内存消耗从1G增加到6G以上,然后就没有错误了。我猜它可能会被内核杀死,因为内存和交换都已满。 这是我的问题,1。我怎么知道它为什么退出? 2.我能知道为什么它突然消耗了这么多内存吗? 代码有800多行,我不知道哪部分可以简化,所以我没有把它粘贴在这里。 基本上,程序只是一个大循环,对不同的数据做相同的事情

这是它崩溃前的最后一刻


我不知道为什么VIRT突然变得这么高,但在这之前,也有一些奇怪的现象,因为整个程序使用30个线程和代理来抓取一些网站,正常流量大约是1MB/s,但在此之前的流量大约是10MB/s,甚至是20MB/s(速度是可能的,因为我在VPS上进行测试),但发生这种情况时的流量几乎为0。我不知道如何将流量和内存问题联系起来。

您可以从Python line profiler开始,它用于查看脚本中每行代码的运行速度和频率

pip install line_profiler
一旦计时,就可以开始分析内存了

pip install -U memory_profiler
pip install psutil
查找“内存泄漏”的最快方法是使用一个名为objgraph的很棒的工具。该工具允许您查看内存中对象的数量,还可以定位代码中包含这些对象引用的所有不同位置

pip install objgraph

您可以从Python line profiler开始,它用于查看脚本中每行代码的运行速度和频率

pip install line_profiler
一旦计时,就可以开始分析内存了

pip install -U memory_profiler
pip install psutil
查找“内存泄漏”的最快方法是使用一个名为objgraph的很棒的工具。该工具允许您查看内存中对象的数量,还可以定位代码中包含这些对象引用的所有不同位置

pip install objgraph

你的程序是做什么的,如何做的(粗略地说)?它会启动30个线程来抓取一个网站,并进行一些分析。起初,我可以看到内存使用量稳步增加,但突然之间,这是疯狂的。您是否很有信心在20分钟的时候会突然从1G增加到6G?或者会是一个更为缓慢的增加?您使用的时间段是什么,例如,在收集或收集之间不管怎样?不完全是20分钟,时间不同,但我确实看到了突然的增加,正如我所知,有缓慢的逐渐增加,因为我正在RAM中存储东西,但是突然增加确实存在,在增加之后,程序会无误退出。你的第二个问题是什么意思?目前我正在另一台机器上测试,以检查t他的。@HumphreyTriscuitI假设您正在按固定的时间间隔安排数据提取,但我可能当然错了您的程序做什么,以及如何(粗略地说)?它会启动30个线程来抓取一个网站,并进行一些分析。起初,我可以看到内存使用量稳步增加,但突然之间,这是疯狂的。您是否很有信心在20分钟的时候会突然从1G增加到6G?或者会是一个更为缓慢的增加?您使用的时间段是什么,例如,在收集或收集之间不管怎样?不完全是20分钟,时间不同,但我确实看到了突然的增加,正如我所知,有缓慢的逐渐增加,因为我正在RAM中存储东西,但是突然增加确实存在,在增加之后,程序会无误退出。你的第二个问题是什么意思?目前我正在另一台机器上测试,以检查t他的。@HumphreyTriscuitI以为你是在定期安排数据提取,但我可能错了,请你回答!这确实是一个非常有用的工具,但我正在寻找发生这种情况的原因,希望有类似经验的人能帮助我。但如果没有人能帮助我,我肯定会接受你的回答。T谢谢你的回复!这确实是一个非常有用的工具,但我正在寻找发生这种情况的原因,并希望有类似经验的人能帮助我。但如果没有人能帮助我,我肯定会接受你的回答。