Python的mmap()性能随着时间的推移而下降

lih*_*dle 2 python memory performance mmap

我想知道为什么Python的mmap()性能会随着时间而下降?我的意思是我有一个小应用程序可以对N个文件进行更改,如果设置很大(不是太大,比如1000),前200是恶魔速度,但之后会变慢和变慢.看起来我应该偶尔释放内存,但不知道如何以及最重要的是为什么Python不会自动执行此操作.

有帮助吗?

- 编辑 -

它是这样的:

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()
Run Code Online (Sandbox Code Playgroud)

Spi*_*nim 6

您的操作系统将mmap的页面缓存在RAM中.读取和写入从缓存中以RAM速度进行.脏页最终被刷新.在Linux上,在你必须开始刷新页面之前,性能会很好,这是由vm.dirty_ratio sysctl变量控制的.一旦开始将脏页刷新到磁盘,读取将与繁忙的IO总线/设备上的写入冲突.另一件需要考虑的事情就是操作系统是否有足够的RAM来缓存所有文件(顶部输出中的缓冲区计数器).所以我会在你的程序运行时观察"vmstat 1"的输出并观察缓存/缓冲计数器,直到你突然开始做IO.