Python';s mmap()性能随时间下降
我想知道为什么Python的mmap()性能会随着时间的推移而下降?我的意思是,我有一个小应用程序,可以对N个文件进行更改,如果设置很大(不是太大,比如说1000),那么前200个是恶魔的速度,但在那之后它会越来越慢。看起来我应该偶尔释放一次内存,但我不知道Python如何以及最重要的是为什么不自动释放内存 有什么帮助吗 --编辑-- 是这样的:Python';s mmap()性能随时间下降,python,performance,memory,mmap,Python,Performance,Memory,Mmap,我想知道为什么Python的mmap()性能会随着时间的推移而下降?我的意思是,我有一个小应用程序,可以对N个文件进行更改,如果设置很大(不是太大,比如说1000),那么前200个是恶魔的速度,但在那之后它会越来越慢。看起来我应该偶尔释放一次内存,但我不知道Python如何以及最重要的是为什么不自动释放内存 有什么帮助吗 --编辑-- 是这样的: def function(filename, N): fd = open(filename, 'rb+') size = os.path.
def function(filename, N):
fd = open(filename, 'rb+')
size = os.path.getsize(filename)
mapped = mmap(fd.fileno(), size)
for i in range(N):
some_operations_on_mmaped_block()
mapped.close()
您的操作系统将mmap页面缓存在RAM中。从缓存中以RAM速度进行读取和写入。脏页最终会被刷新。在Linux上,性能将非常好,直到您必须开始刷新页面,这是由vm.dirty\u ratio sysctl变量控制的。一旦开始将脏页刷新到磁盘,读操作将与繁忙IO总线/设备上的写操作竞争。另一个需要考虑的问题是,您的操作系统是否有足够的RAM来缓存所有文件(缓冲输出在顶部输出中)。因此,我会在程序运行时观察“vmstat 1”的输出,并观察缓存/buff计数器上升,直到您突然开始执行IO。我们可以看到一些代码吗?这可能说明了GC不起作用的原因。添加了代码,实际上几乎就是一切,在循环中,如果该语句为真,我会对文件进行3次操作。您是否真的观看了
top
或任务管理器或您平台的其他内容?Python正在占用越来越多的内存吗?CPU是固定的吗?或者只是你的硬盘缓存被填满了?当它运行缓慢时,你看过操作系统的统计数据了吗?不知道你是否在交换。这表明存在gc问题。映射到null
的设置是否改善或修复了您的问题?