使用GeoServer提供大型栅格会导致JAVA HEAP内存不足

时间:2016-05-18 17:21:25

标签: java jetty gis geoserver wms

我在GeoServer上有像35000px X 30000px这样非常大的栅格。(马赛克图像) 我目前正在做的是使用 WMS 下载这些图像,然后对该图像执行分析,修改它(我正在着色该图像的某些部分),然后将其上传回GeoServer作为新层。

这适用于高达20000px X 20000px的图像,但之后GeoServer无法合并它们而不是geotiff图像返回带有xml内容的文件并在其中:

错误[geoserver.ows] - java.lang.OutOfMemoryError:Java堆空间

现在在java选项变量中,我将 Xmx 插入到22 GB,并且用于运行jetty Xmx 的内部脚本放置为20GB。我正在使用top和free -m命令密切关注平均负载,并且在任何时候都没有使用超过8GB的内存。 我的服务器有28GB RAM和8个处理器,CPU负载从未超过700%。 有人可以给我一个暗示我做错了什么,我能做什么,所以我可以下载如此大的Geotiff图像。 顺便说一句,我使用jetty作为服务器。

1 个答案:

答案 0 :(得分:1)

虽然我没有意识到为什么会出现这种错误但我设法使用Web覆盖服务(WCS)而不是WMS从GeoServer下载整个栅格。 下载大光栅图像时,WCS是正确的方法。 因此,如果有人遇到类似的问题我建议你发送邮件请求到这样的地理服务器上的wcs服务 POST http://192.168.4.162:9090/geoserver/wcs 并且当数据传递xml描述您的图层时(您可以使用Geoserver中 demos 菜单下的WCS请求构建器创建它).Mine看起来像这样:

<?xml version="1.0" encoding="UTF-8"?><GetCoverage version="1.0.0" service="WCS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opengis.net/wcs" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xsi:schemaLocation="http://www.opengis.net/wcs http://schemas.opengis.net/wcs/1.0.0/getCoverage.xsd">
  <sourceCoverage>fiware:test</sourceCoverage>
  <domainSubset>
    <spatialSubset>
      <gml:Envelope srsName="EPSG:4326">
        <gml:pos>-87.3539257 38.3719729154</gml:pos>
        <gml:pos>-87.3437449312 38.3783359</gml:pos>
      </gml:Envelope>
      <gml:Grid dimension="2">
        <gml:limits>
          <gml:GridEnvelope>
            <gml:low>0 0</gml:low>
            <gml:high>32768 20479</gml:high>
          </gml:GridEnvelope>
        </gml:limits>
        <gml:axisName>x</gml:axisName>
        <gml:axisName>y</gml:axisName>
      </gml:Grid>
    </spatialSubset>
  </domainSubset>
  <output>
    <crs>EPSG:4326</crs>
    <format>GeoTIFF</format>
  </output>
</GetCoverage>

并且不要忘记将application / xml作为Content-type。 干杯!