首页 > 解决方案 > 如何限制python GDAL VRT读取的RAM使用

问题描述

在使用 python gdal 库读取 VRT 区域时,RAM 使用量不断增加,最多可达可用内存的 50%。这在普通计算机上很好,但在具有大量可用 RAM 的计算集群上运行时会成为问题。

有没有办法限制 gdal 使用多少 RAM?

编辑:

我一次读取 256x256 像素的块,这些块vrt.ReadAsArray(...)立即使用,之后不再需要。但是,从内存消耗来看,gdal 将读取的切片保留在内存中,以防再次需要它们,直到可用内存被填充约 50%。只有这样它才会开始从 RAM 中删除未使用的图块。无论我在什么硬件上运行程序,内存消耗都会随着时间的推移而不断增加,直到达到 50% 标记。

我想将其限制为 32Gb RAM 之类的东西。

我找到了CHACHE_MAXgdal 的配置选项。但是,在检查已使用缓存的数量时,gdal.GetCacheUsed()它显然始终为 0。因此,虽然该选项听起来很有希望,但这似乎并没有提供解决方案。

标签: pythonmemorygdal

解决方案


我终于做了一些测试并找到了解决方案,以防其他人遇到这个问题。

虽然gdal.GetCacheUsed()总是返回 0,但更改CACHE_MAX配置选项为我解决了这个问题。这可以像这样在python中设置:

from osgeo import gdal
gdal.SetCacheMax(134217728) # 134Mb

虽然我无法弄清楚这个限制究竟是如何应用的,但缓存大小似乎是每个波段、VRT 中的每个光栅、每个 VRT、每个进程。也就是说,具有许多栅格和波段等的 VRT 的内存使用率会更高。


推荐阅读