栅格访问

中的“服务器”菜单中的“覆盖率访问设置”页 Web管理界面 提供用于自定义线程池执行器和ImageIO缓存内存的配置选项。

../_images/raster_access.png

栅格访问设置

内存使用

WMS请求通常生成相对较小的图像,而WCS请求可能经常处理较大的数据集。在编码之前将图像缓存在内存中,当图像的大小不太大时可能会有所帮助。对于一个巨大的图像(由一个大的WCS请求生成的图像),最好通过一个临时文件来缓存内存。此部分允许指定阈值图像大小,以便GeoServer决定是否使用 MemoryCacheImageOutputStreamFileCacheImageOutputStream 对图像进行编码时。

ImageIO缓存内存阈值 -设置阈值大小(以千字节表示),使GeoServer可以在文件缓存和基于内存的缓存之间进行选择。如果要编码的图像的估计大小小于阈值,则 MemoryCacheImageOutputStream 将用于在内存中缓存图像。如果要编码的图像的估计大小大于阈值,则 FileCacheImageOutputStream 将被使用。

CPU使用

imageMosaic读取器可以通过 ThreadPoolExecutor . 全局ThreadPoolExecutor实例由支持并使用并发读取的所有读卡器共享。覆盖率访问设置管理页面的此部分允许配置执行器参数。

核心池大小 -设置线程池执行器的核心池大小。必须指定正整数。

最大池大小 -设置线程池执行器的最大池大小。必须指定正整数。

生存时间 -设置执行器在终止空闲线程之前等待的时间,以防线程数超过 corePoolSize .

队列类型 -执行器服务使用 BlockingQueue 管理提交的任务。使用 unbounded 建议使用queue,它允许对所有挂起的请求进行无限制(无限制)的排队。用一个 direct 类型,传入的请求将在已存在 maximumPoolSize 繁忙的线程。

备注

如果新任务提交到要执行的任务列表,并且小于 corePoolSize 线程正在运行,将创建一个新线程来处理该请求。传入任务排队以防 corePoolSize 或更多线程正在运行。

备注

如果请求不能排队或少于 corePoolSize 线程运行时,将创建一个新线程,除非超过 maximumPoolSize .

备注

如果池当前有超过 corePoolSize 如果线程空闲时间超过 keepAliveTime .

备注

如果新任务提交到要执行的任务列表,并且 corePoolSize 但小于 maximumPoolSize 线程运行时,仅当队列已满时才会创建新线程。这意味着当使用 Unbounded 队列,线程数不超过 corePoolSize 会继续运行 keepAliveTime 没有影响力。

备注

如果 corePoolSizemaximumPoolSize 如果相同,则使用固定大小的线程池。

系统属性配置

栅格访问中还涉及一些其他全局配置参数,这些参数可以通过系统属性指定。

最大过采样系数

在处理重投影时,底层栅格读取操作可能会进行一些过采样,以便提供所请求的输出分辨率。根据重投影和请求的区域,过采样系数可能很高。

考虑一个EPSG:4326栅格对EPSG:3857的未引导全球请求,填充1024x768图像。由于墨卡托投影在高纬度地区引入的大失真,底层的读取操作可能会导致实际读取20000x8000像素,换句话说,过采样系数几乎为20。图像处理操作将在返回所需的1024x768图像之前对该大输入图像进行操作。

这可能非常耗时(您可能会注意到渲染时间很长)。可以通过将以下Java选项添加到Geoserver启动脚本并重新启动它来限制最大过采样因子:

-Dorg.geotools.coverage.max.oversample=N

其中N是表示最大过采样因子的数字。通过这种方式,底层读取操作将使用该限制内的读取分辨率,从而使渲染速度更快。然而,速度增益是有代价的,两极的输出质量会下降。因此,您可能希望使用该值来找到速度和质量之间的最佳折衷。例如,可以从值3开始尝试并检查结果,然后慢慢增加该值,直到输出在可接受的渲染时间内与所需质量匹配。

Previous: 图像处理