GeoServer WMS地圖請求記憶體限制問題
阿新 • • 發佈:2018-11-01
應用需求:GeoServer釋出WMS地圖服務後,需要請求獲取一張較大的地圖圖片,請求地址如下:
http://localhost:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=campus&styles=&
bbox=4.528514,4.950175,4.546676,4.958241
&width=7430&height=3300&srs=EPSG:4326&format=image/png
其中,輸出的地圖圖片的高、寬分別為:3300、7430。
問題一:在瀏覽器中位址列中回車傳送請求後,丟擲以下異常,提示地圖渲染超過了65536KB的大小限制:
<pre name="code" class="html"><?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE ServiceExceptionReport SYSTEM "http://localhost:8080/geoserver/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd"> <ServiceExceptionReport version="1.1.1" > <ServiceException> Rendering request would use 71833KB, whilst the maximum memory allowed is 65536KB </ServiceException> </ServiceExceptionReport>
解決一:登入 GeoServer Web Admin Page 管理頁面,在左側的服務中,點選WMS,在右側把Max rendering memory (KB)的值由65536改為了6553600以確保夠用。重新請求即可成功。
問題二:當繼續增加請求的圖片大小時(高、寬:14860、6600),仍然會丟擲異常,請求URL和異常資訊如下:
http://localhost:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=campus&styles=& bbox=4.528514,4.950175,4.546676,4.958241 &width=14860&height=6600&srs=EPSG:4326&format=image/png
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE ServiceExceptionReport SYSTEM
"http://localhost:8080/geoserver/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd">
<ServiceExceptionReport version="1.1.1" >
<ServiceException>
java.lang.NegativeArraySizeException
null
</ServiceException>
</ServiceExceptionReport>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE ServiceExceptionReport SYSTEM
"http://localhost:8080/geoserver/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd">
<ServiceExceptionReport version="1.1.1" >
<ServiceException>
java.lang.OutOfMemoryError: Java heap space
Java heap space
</ServiceException>
</ServiceExceptionReport>
解決二:開始選單 >> Start GeoServer 右鍵屬性,找到 "C:\Program Files (x86)\GeoServer 2.5\bin\
startup.bat" ,用記事本開啟:
call "C:\Program Files (x86)\Java\jdk1.8.0\bin\java.exe" -DGEOSERVER_DATA_DIR="C:\Program Files (x86)\GeoServer 2.5\data_dir" -Xmx512m -XX:MaxPermSize=128m -DSTOP.PORT=8079 -DSTOP.KEY=geoserver -Djetty.port=8080 -Djetty.logs="C:\Program Files (x86)\GeoServer 2.5\logs" -jar "C:\Program Files (x86)\GeoServer 2.5\start.jar"
修改其中的
-Xmx512m -XX:MaxPermSize=128m 部分,修改如下:
call "C:\Program Files (x86)\Java\jdk1.8.0\bin\java.exe" -DGEOSERVER_DATA_DIR="C:\Program Files (x86)\GeoServer 2.5\data_dir" -Xmx1024m -XX:MaxPermSize=512m -DSTOP.PORT=8079 -DSTOP.KEY=geoserver -Djetty.port=8080 -Djetty.logs="C:\Program Files (x86)\GeoServer 2.5\logs" -jar "C:\Program Files (x86)\GeoServer 2.5\start.jar"
再次請求地圖URL,問題解決。
參考文章:
1. Maximum memory for GetMap request
3. Geoserver/java out of heap space - how do I increase it?
注:經測試,WMS請求的圖片大小似乎不能超過10M,原因不明。