使用Scapy会话造成内存泄漏

时间:2018-11-23 15:10:03

标签: python memory-leaks scapy psutil guppy

scapy 2.4.0当前在centos 7.4上运行的python 2.7上内存使用率很高

最初,我认为这是由于https://bitbucket.org/secdev/scapy/issues/5149/rdpcap-and-wrpcap-file-descriptor-leak造成的,但这是在一段时间前解决的。

import scapy
from guppy import hpy
import psutil
hp = hpy()


class SessionBuilder(object):
    def __init__(self):
        pass

    def get_sessions(pcap):
        # this heap always reports 50mb usage
        hp.heap()
        process = psutil.Process(os.getpid())
        # I expect this memory to be around 50mb... but that's not always true
        print process.memory_info()
        opened_pcap = rdpcap("pcap_location")
        sessions = opened_pcap.session()
        # this heap always reports 50mb usage
        hp.heap()
        # I expect this memory to be larger which is it
        print process.memory_info()
        return sessions

在另一个python文件中

import SessionBuilder
class session_worker
    def __init__(self):
        self.sb = SessionBuilder()

    def work(self):
        for pcap in pcaps:
            sessions = self.sb.get_sessions(pcap)


        # I then go about doing some things with these sessions

为代码中的某些错误表示歉意,但是它是在离线系统上,因此只添加了我正在做的工作的大致部分。

每次我循环时,前一个循环的内存都会保留,这只会一直持续到我没有记忆为止 (上面的代码中未提供此功能,但是有一些逻辑可以忽略大于框上可用内存的1/4的任何pcap,以确保scapy可以打开它并提取会话)

根据Using heapy to track down memory leaks in Django app,代表python正在使用的内存而不是任何底层c代码的堆容量。我假设scapy在下面使用c?

0 个答案:

没有答案