一、原因
geoserver切片的时候经常自行停止,让人很是头疼。
某次切片的时候终于逮到它报的错了。原来是内存(GC)不足。
于是就又研究了一下jvm内存调优。
二、分析
官网手册:GeoServer:Optimize your JVM
内存设置需要配置以下几个参数:
- -Xms128m:JVM初始分配的堆内存,默认是物理内存的1/64;
- -Xmx512M:JVM最大分配的堆内存,默认是物理内存的1/4。
如果Xmx配置得过小,可能会导致java.lang.OutOfMemory错误;也就是我切片时遇到的问题。
因此,我的解决思路就是修改Xmx配置。
三、操作
1、jetty
如果安装时使用的是windows installer安装方式的话,web服务器就是jetty。
找到GeoServer/bin/startup.bat,右键,编辑,将-Xmx512m
改成自己需要的值。
如下图,我将配置文件中最大内存改为了32G,在系统中服务器状态可以看到效果。
2、tomcat
找到 tomcat_dir/bin/catalina.bat,右键,编辑,在第一行下插入:set JAVA_OPTS=-Xms256m -Xmx6G
。
PS:如果是linux操作系统,则应该编辑catalina.sh;且输入的格式为:JAVA_OPTS="-Xms256m -Xmx6G"
。
PPS:如果geoserver在docker容器中,需要考虑容器内存的限制。
一般来说,容器可以使用主机的所有内存;如果在启动时加入-m或–memory参数,设置了容器内存限制,此时geoserver的可用内存就需要基于容器的内存计算。