问题描述
当使用python gdal库读取VRT区域时,RAM使用率一直保持增加到大约50%的可用内存。在普通计算机上,这很好,但在具有大量可用RAM的计算群集上运行时,就会成为问题。
有没有办法限制gdal使用多少RAM?
编辑:
我正在使用vrt.ReadAsArray(...)
一次读取256x256像素的块,这些块立即使用,以后不再需要。但是,从内存消耗来看,gdal会将读取的切片保留在内存中,以防万一再次需要它们,直到可用内存大约填满50%。只有这样,它才会开始从RAM中删除未使用的图块。不管我在什么程序上运行硬件,内存消耗都会随着时间的推移不断增加,直到达到50%。
我想将其限制为32Gb RAM。
我发现gdal的CHACHE_MAX
配置选项。但是,在使用gdal.GetCacheUsed()
检查已使用的缓存量时,它显然总是为0。因此,尽管该选项听起来很有希望,但这似乎无法提供解决方案。
解决方法
我终于做了一些测试,找到了解决方案,以防其他人遇到这个问题。
尽管gdal.GetCacheUsed()
始终返回0,但是更改CACHE_MAX
config选项对我来说解决了这个问题。可以在python这样设置:
from osgeo import gdal
gdal.SetCacheMax(134217728) # 134Mb
虽然我无法弄清楚此限制的适用程度,但缓存大小似乎是每个波段,每个VRT中的栅格,每个VRT,每个进程。也就是说,具有许多栅格和波段等的VRT的内存使用量将更高。