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?