Documento publicado bajo licencia Creative Commons reconocimiento compartir-igual (CC-by-sa). Consultar autoría en el histórico de commits. Contribuciones bienvenidas.
- Sistema Operativo: Recomendado Ubuntu 16.04 Server 64 bits
- CPU: 2-4 cores
- RAM: 1-2 GB
- Disco: Según cantidad de datos a publicar (contar con la caché de teselas)
Configurar conexión y nombre de la máquina:
ifconfig eth0 <public_ip> <mask> route add default gw <gateway> echo "<nombre>" > /etc/hostname hostname -F /etc/hostname
/etc/hosts debería contener:
127.0.0.1 localhost.localdomain localhost <public_ip> <nombre>.example.com <nombre>
Zona horaria:
dpkg-reconfigure tzdata
Actualizar paquetes:
apt-get update apt-get upgrade
Activar la actualización automática de paquetes:
sudo apt-get install unattended-upgrades sudo dpkg-reconfigure -plow unattended-upgrades
Algunas utilidades básicas:
apt-get install locate updatedb
Instalar y configurar firewall (ufw):
apt install ufw ufw allow 22/tcp ufw allow 80/tcp ufw allow 443/tcp ufw allow 8080/tcp ufw default deny incoming ufw default allow outgoing ufw enable ufw status
Instalar fail2ban:
apt-get install fail2ban service fail2ban restart
Crear usuarios SUDOers:
adduser <name> adduser <name> sudo
Bloquear login de ROOT vía SSH. Cambiar esta línea /etc/ssh/sshd_config:
PermitRootLogin no
Reiniciar servicio ssh:
service ssh reload
Evitar el error 'too many files open'...
Añadir estas líneas a /etc/security/limits.conf
* hard nofile 65535 * soft nofile 65535 root hard nofile 65535 root soft nofile 65535
Tras reiniciar la máquina, comprobar límite con:
cat /proc/<tomcat pid>/limits
Si el límite sigue siendo 1024 o 4096, tocar las siguientes líneas en /etc/init.d/tomcat:
ulimit -Hn 65535 ulimit -Sn 65535
Instalar fuentes de Microsoft:
apt-get install ttf-mscorefonts-installer
Instalar OpenJDK JRE 8 y Tomcat 8:
apt-get install openjdk-8-jre apt-get install tomcat8
Añadir JAI y JAI-ImageIO nativos:
cd /usr/lib/jvm/java-8-openjdk-amd64 wget http://download.java.net/media/jai/builds/release/1_1_3/jai-1_1_3-lib-linux-amd64-jdk.bin sh jai-1_1_3-lib-linux-amd64-jdk.bin wget http://download.java.net/media/jai-imageio/builds/release/1.1/jai_imageio-1_1-lib-linux-amd64-jdk.bin export _POSIX2_VERSION=199209 sh jai_imageio-1_1-lib-linux-amd64-jdk.bin
Reiniciar server
service tomcat8 restart
Instalar GDAL (1.11):
apt-get install gdal-bin
Instalar PostgreSQL y PostGIS:
apt-get install postgresql postgis apt-get install postgresql-9.5-postgis-2.2
Habilitar acceso local. En /etc/postgresql/9.5/main/pg_hba.conf:
# TYPE DATABASE USER ADDRESS METHOD local all postgres ident local all all md5 host all all 127.0.0.1/32 md5
Y en /etc/postgresql/9.5/main/postgresql.conf, descomentar:
listen_addresses = 'localhost'
Reiniciar para aplicar cambios:
service postgresql restart
Para acceder a la consola SQL:
sudo -u postgres psql
Crear un nuevo "usuario", y base de datos PostGIS:
CREATE USER usuario LOGIN PASSWORD '------' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE; CREATE DATABASE geodatos OWNER usuario; CREATE EXTENSION postgis;
En caso de tener que abrir directamente un puerto (opción menos segura):
En /etc/postgresql/9.5/main/postgresql.conf:
listen_addresses = '*' # O mejor, una lista de IPs, si son fijas.En /etc/postgresql/9.5/main/pg_hba.conf, añadir una línea específica de acceso para una combinación de IP, BDD y usuario determinados (a ser posible, no usar comodines o "all" para el acceso remoto).
Descargar el Oracle Instant Client del sitio web de Oracle:
http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
Además del cliente "basic", se recomienda descargar las extensiones "jdbc" y "sqlplus". Por ejemplo:
- oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
- oracle-instantclient11.2-jdbc-11.2.0.3.0-1.x86_64.rpm
- oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.x86_64.rpm
En Ubunu, hará falta convertir los paquetes rpm a deb:
sudo apt-get install alien sudo alien <paquete>.rpm sudo dpkg -i <paquete>.deb
Una vez instalados los tres paquetes, el cliente estará instalado en la ruta /usr/lib/oracle/11.2/client64/.
Crearemos un subdirectorio tns para añadir los ficheros con las configuraciones de conexión:
mkdir /usr/lib/oracle/11.2/client64/tns/
En este directorio crearemos un fichero tnsnames.ora con la cadena de conexión:
<NOMBRE_TNS> = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = <HOST_ORACLE>)(PORT = 1521)) ) (CONNECT_DATA = (SID = <SID_ORACLE>) (SERVER = DEDICATED) ) )
Se puede comprobar la conexión con sqlplus64 mediante los siguientes comandos:
export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib/ export TNS_ADMIN=/usr/lib/oracle/11.2/client64/tns/ sqlplus64 <SCHEMA>/<PASSWORD>@<NOMBRE_TNS>
Tras instalar GeoServer, instalar también la extensión oficial de Oracle. Recordar copiar ojdbc?.jar en WEB-INF/lib.
Autogenerar certificado (para pruebas; usar certificado real en producción):
cd /var/lib/tomcat8 keytool -genkey -alias admin -keypass adminpass -keystore certificate.bin -storepass adminpass -keyalg RSA chown tomcat8:tomcat8 certificate.bin
Configurar /var/lib/tomcat8/conf/server.xml para usar los puertos 80 y 443:
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="443" /> <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" sslEnabledProtocols="v1.2,TLSv1.1,TLSv1" keystoreFile="certificate.bin" keystorePass="adminpass" />
Permitir a Tomcat usar puertos estándard, por debajo de 1024, usando authbind:
apt-get install authbind touch /etc/authbind/byport/80 chmod 500 /etc/authbind/byport/80 chown tomcat8 /etc/authbind/byport/80 touch /etc/authbind/byport/443 chmod 500 /etc/authbind/byport/443 chown tomcat8 /etc/authbind/byport/443
Editar /etc/default/tomcat8 y editar la directiva AUTHBIND:
AUTHBIND=yes
Si sólo se quiere usar HTTPS, forzar su uso para todas las aplicaciones, inhabilitando el puerto HTTP. Añadir este contenido a /var/lib/tomcat8/conf/web.xml:
<security-constraint> <web-resource-collection> <web-resource-name>Protected Context</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
Reiniciar tomcat:
service tomcat8 restart
GeoServer 2.10.0 (o "latest stable"):
cd /var/lib/tomcat8/webapps/ wget http://sourceforge.net/projects/geoserver/files/GeoServer/2.10.0/geoserver-2.10.0-war.zip apt-get install unzip unzip geoserver-2.10.0-war.zip rm -rf target/ *.txt geoserver-2.10.0-war.zip
Mover el GEOSERVER_DATA_DIR fuera de los binarios:
mv /var/lib/tomcat8/webapps/geoserver/data /var/local/geoserver mkdir /var/local/geowebcache chown tomcat8:tomcat8 /var/local/geowebcache
Editar el fichero /etc/default/tomcat8 y añadir al final las rutas a Java, los datos, la caché, y parámetros de optimización:
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 GEOSERVER_DATA_DIR=/var/local/geoserver GEOWEBCACHE_CACHE_DIR=/var/local/geowebcache JAVA_OPTS="-server -Djava.awt.headless=true -Xms512m -Xmx1536m -XX:+UseConcMarkSweepGC -XX:NewSize=48m -DGEOSERVER_DATA_DIR=$GEOSERVER_DATA_DIR -DGEOWEBCACHE_CACHE_DIR=$GEOWEBCACHE_CACHE_DIR"
Reiniciar tomcat:
service tomcat8 restart
Entrar a:
http://<maquina>:8080/geoserver/web/
- En "server status", combrobar que:
- El Data directory apunta a /var/lib/geoserver_data
- La JVM es la instalada (OpenJDK 1.8 64 bits)
- Native JAI y Native JAI ImageIO están a "true"
En /var/lib/tomcat8/webapps/geoserver/WEB-INF/web.xml, añadir:
<filter> <filter-name>CorsFilter</filter-name> <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> </filter> <filter-mapping> <filter-name>CorsFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <init-param> <param-name>cors.support.credentials</param-name> <param-value>true</param-value> </init-param>
Seguir las notificaciones de seguridad que aparecen en la página principal de GeoServer:
- Cambiar password de "admin".
- Cambiar el master password.
Bajo "About & Status":
- Editar la información de contacto. Esto aparecerá en los servicios WMS públicos: dejar a "Claudius Ptolomaeus" es indecente.
Bajo "Data":
- Borrar todos los espacios de trabajo (workspaces) existentes.
- Borrar todos los estilos existentes (dirá que hay 4 que no los puede borrar, esto es correcto).
Bajo "Services":
- WCS: Deshabilitar si no va a usarse.
- WFS: Cambiar el nivel de servicio a "Básico" (a menos que queramos permitir la edición remota de datos vectoriales).
- WMS: En "Limited SRS list", poner sólo las proyecciones que deseamos anunciar en nuestro servicio WMS. Esto reduce el tamaño del GetCapabilities. Por ejemplo: 23029, 23030, 23031, 25829, 25830, 25831, 4230, 4258, 4326, 3857, 900913.
Bajo "Settings":
- Global: Cambiar el nivel de logging a PRODUCTION_LOGGING.
Bajo "Tile Caching":
- Caching Defaults: Activar los formatos "image/png8" para capas vectoriales, "image/jpeg" para capas ráster, y ambas para los grupos de capas.
- Disk Quota: Habilitar la cuota de disco. Tamaño máximo algo por debajo de la capacidad que tenga la unidad de Tile Caché.
Descargar el fichero de malla de:
https://github.com/oscarfonts/gt-datumshift/blob/master/icc-tests/src/test/resources/org/geotools/referencing/factory/gridshift/100800401.gsb?raw=true
Copiar el fichero de malla en user_projections:
cp 100800401.gsb /var/lib/geoserver_data/user_projections/ chown tomcat8:tomcat8 100800401.gsb
Forzar que se use también para la proyección Google Earth. Crear un fichero en user_projections llamado epsg_operations.properties, con el siguiente contenido:
4230,4258=PARAM_MT["NTv2", PARAMETER["Latitude and longitude difference file", "100800401.gsb"]] 4230,4326=PARAM_MT["NTv2", PARAMETER["Latitude and longitude difference file", "100800401.gsb"]]
Cambiar el owner:
chown tomcat8:tomcat8 epsg_operations.properties
Reiniciar GeoServer:
service tomcat8 restart
Comprobar que se utiliza la malla para reproyectar entre "EPSG:4230" y "EPSG:4258", y entre "EPSG:4230" y "EPSG:4326".
Esto se puede comprobar en la web de GeoServer, bajo "Demos" => Reprojection Console.
- Instalar la extensión "GDAL" correspondiente a la versión de GeoServer: http://sourceforge.net/projects/geoserver/files/GeoServer%20Extensions/
cd /var/lib/tomcat8/webapps/geoserver/WEB-INF/lib/ wget http://sourceforge.net/projects/geoserver/files/GeoServer%20Extensions/2.9.0/geoserver-2.9.0-gdal-plugin.zip unzip geoserver-2.9.0-gdal-plugin.zip rm *.txt *.TXT *.zip chown tomcat8:tomcat8 *.jar
Instalar las definiciones CRS (gdal_data):
cd /var/lib/geoserver_data mkdir gdal cd gdal wget http://demo.geo-solutions.it/share/github/imageio-ext/releases/1.1.X/1.1.8/gdal/gdal-data.zip unzip gdal-data.zip
Instalar las librerías nativas de GDAL:
mkdir lib cd lib wget http://demo.geo-solutions.it/share/github/imageio-ext/releases/1.1.X/1.1.8/gdal/linux/gdal192-Ubuntu12-gcc4.6.3-x86_64.tar.gz tar -xvf gdal192-Ubuntu12-gcc4.6.3-x86_64.tar.gz
Añadir variables de entorno, a /etc/default/tomcat8:
export GDAL_DATA=$GEOSERVER_DATA_DIR/gdal/gdal-data export LD_LIBRARY_PATH=$GEOSERVER_DATA_DIR/gdal/lib
Cambiar permisos y reiniciar tomcat:
chown -R tomcat8:tomcat8 /var/lib/geoserver_data/ service tomcat8 restart
Se listarán los nuevos formatos al crear un almacén de datos raster.
Warning
Utilizar ECW en un servidor sin comprar una licencia a ERDAS es ilegal.
Para usar el formato ECW en un servidor de mapas, es necesario leer y aceptar esto: http://demo.geo-solutions.it/share/github/imageio-ext/releases/1.1.X/1.1.7/native/gdal/linux/ECWEULA.txt
CSS. Simbolizar más fácil que con SLD:
https://sourceforge.net/projects/geoserver/files/GeoServer/2.9.0/extensions/geoserver-2.9.0-css-plugin.zip
Importer. Crear capas de un conjunto de tablas PostGIS o de ficheros ráster sin tener que ir una a una:
https://sourceforge.net/projects/geoserver/files/GeoServer/2.9.0/extensions/geoserver-2.9.0-importer-plugin.zip
Control Flow. Evita sobresaturar el servidor:
https://sourceforge.net/projects/geoserver/files/GeoServer/2.9.0/extensions/geoserver-2.9.0-control-flow-plugin.zip http://docs.geoserver.org/latest/en/user/extensions/controlflow/index.html
LibJPEG Turbo. Acelera salida en JPEG:
http://sourceforge.net/projects/libjpeg-turbo/files/1.3.0/libjpeg-turbo-official_1.3.0_amd64.deb dpkg -i libjpeg-turbo-official_1.3.0_amd64.deb Añadir /opt/libjpeg-turbo/lib64 a LD_LIBRARY_PATH en /etc/default/tomcat8. https://sourceforge.net/projects/geoserver/files/GeoServer/2.9.0/extensions/geoserver-2.9.0-libjpeg-turbo-plugin.zip
Printing (a partir de GS 2.6.0; si se instala una versión anterior, ver siguiente párrafo "Extensiones community"):
wget https://sourceforge.net/projects/geoserver/files/GeoServer/2.9.0/extensions/geoserver-2.9.0-printing-plugin.zip unzip en WEB-INF/lib y cambiar permisos
Para que se pueda imprimir en diferentes formatos (gif, png, tiff) después de instalar la extensión printing hay que añadir la librería fontbox:
sudo wget https://archive.apache.org/dist/pdfbox/1.6.0/fontbox-1.6.0.jar sudo chown tomcat8. fontbox-1.6.0.jar sudo service tomcat8 restart
No están mantenidas oficialmente, y no forman parte del "build" oficial. Hay que compilarlos desde las fuentes:
git clone [email protected]:geoserver/geoserver.git cd geoserver # git tag -l git checkout -b tags/2.9.0 cd src/community mvn clean install -PcommunityRelease,proxy -DskipTests mvn assembly:single # Proxy jar generated in: proxy/target/gs-proxy-2.9.0.jar # Printing extension generated in: target/release/geoserver-2.9.0-printing-plugin.zip
Ejemplo de configuración para la extensión de printing (copiar en /var/lib/geoserver_data/printing/):
https://dl.dropboxusercontent.com/u/2368219/geoserver/config.yaml
Si se quiere mayor resolución en los KML superoverlays autogenerados por el servicio GWC, hay que sobreescribir la definición del gridset "EPSG:4326" editando directamente el fichero en disco. En este caso, añadiremos los niveles 23, 24 y 25, que aumentan la resolución máxima en un orden de magnitud. Localizar el fichero $GEOWEBCACHE_CACHE_DIR/geowebcache.xml, y añadir el siguiente gridset:
<gridSet> <name>EPSG:4326</name> <description>A default WGS84 tile matrix set where the first zoom level covers the world with two tiles on the horizonal axis and one tile over the vertical axis and each subsequent zoom level is calculated by half the resolution of its previous one.</description> <srs> <number>4326</number> </srs> <extent> <coords> <double>-180.0</double> <double>-90.0</double> <double>180.0</double> <double>90.0</double> </coords> </extent> <alignTopLeft>false</alignTopLeft> <resolutions> <double>0.703125</double> <double>0.3515625</double> <double>0.17578125</double> <double>0.087890625</double> <double>0.0439453125</double> <double>0.02197265625</double> <double>0.010986328125</double> <double>0.0054931640625</double> <double>0.00274658203125</double> <double>0.001373291015625</double> <double>6.866455078125E-4</double> <double>3.433227539062E-4</double> <double>1.716613769531E-4</double> <double>8.58306884766E-5</double> <double>4.29153442383E-5</double> <double>2.14576721191E-5</double> <double>1.07288360596E-5</double> <double>5.3644180298E-6</double> <double>2.6822090149E-6</double> <double>1.3411045074E-6</double> <double>6.705522537E-7</double> <double>3.352761269E-7</double> <double>1.676380634E-7</double> <double>8.38190317E-8</double> <double>4.19095159E-8</double> </resolutions> <metersPerUnit>111319.49079327358</metersPerUnit> <pixelSize>2.8E-4</pixelSize> <scaleNames> <string>EPSG:4326:0</string> <string>EPSG:4326:1</string> <string>EPSG:4326:2</string> <string>EPSG:4326:3</string> <string>EPSG:4326:4</string> <string>EPSG:4326:5</string> <string>EPSG:4326:6</string> <string>EPSG:4326:7</string> <string>EPSG:4326:8</string> <string>EPSG:4326:9</string> <string>EPSG:4326:10</string> <string>EPSG:4326:11</string> <string>EPSG:4326:12</string> <string>EPSG:4326:13</string> <string>EPSG:4326:14</string> <string>EPSG:4326:15</string> <string>EPSG:4326:16</string> <string>EPSG:4326:17</string> <string>EPSG:4326:18</string> <string>EPSG:4326:19</string> <string>EPSG:4326:20</string> <string>EPSG:4326:21</string> <string>EPSG:4326:22</string> <string>EPSG:4326:23</string> <string>EPSG:4326:24</string> </scaleNames> <tileHeight>256</tileHeight> <tileWidth>256</tileWidth> <yCoordinateFirst>false</yCoordinateFirst> </gridSet>
La Tile Caché del ICC sigue un esquema de teselado particular, distinto al utilizado habitualmente por la mayoría de aplicaciones de web mapping. Por tanto, debe definirse en GeoServer este esquema particular de teselado:
Sistema de coordenadas: EPSG:23031
Límites:
- Min X: 258000
- Min Y: 4485000
- Máx X: 536000
- Máx Y: 4752000
Ancho y alto tesela: 256 x 256 px.
Matriz de teselas, defiida a partir de resolución en m/px:
Nivel | Tamaño del píxel | Nombre |
---|---|---|
0 | 1100 | Catalunya en 1 tile |
1 | 550 | Catalunya en 2x2 tiles |
2 | 275 | Catalunya en 4x4 tiles |
3 | 100 | Escala 1:1 000 000 |
4 | 50 | Escala 1:500 000 |
5 | 25 | Escala 1:250 000 |
6 | 10 | Escala 1:100 000 |
7 | 5 | Escala 1:50 000 |
8 | 2 | Escala 1:20 000 |
9 | 1 | Escala 1:10 000 |
10 | 0.5 | Escala 1:5 0000 |
11 | 0.25 | Escala 1:2 500 |
12 | 0.1 | Escala 1:1 000 |
Nota de autoría de este apartado (copiado del proyecto GeoTalleres):
Note
Fecha | Autores |
---|---|
6 Feb 2014 |
|
©2014 FAO Forestry
Excepto donde quede reflejado de otra manera, la presente documentación se halla bajo licencia : Creative Commons (Creative Commons - Attribution - Share Alike: http://creativecommons.org/licenses/by-sa/3.0/deed.es)
Existen varias optimizaciones a tener en cuenta para poner GeoServer en producción. Aquí tendremos en cuenta únicamente la limitación del servicio WMS y la configuración del nivel de logging. Para una optimización más completa se puede consultar este whitepaper (en inglés). En la presente documentación asumimos que GeoServer se está ejecutando sobre el contenedor Tomcat, por lo que también veremos cómo limitar el número máximo de conexiones simultáneas en Tomcat.
Para realizar las optimizaciones, primero tenemos que abrir interfaz web de administración y acceder a la configuración global de GeoServer:
Una vez allí, únicamente hay que cambiar el Perfil de registro a PRODUCTION_LOGGING y pulsar Enviar al final de la página:
También es posible cambiar la Ubicación del registro desde aquí, aunque se recomienda mantener la ubicación por defecto.
En cuanto al servicio WMS, vamos a limitar las peticiones recibidas en dos niveles. Por un lado limitaremos el tiempo y la memoria necesarios para procesar una petición de la llamada GetMap, y por otro lado el número de peticiones simultáneas que acepta el dicho servicio.
Tiempo y memoria
Para limitar el tiempo y la memoria requeridos por una única petición WMS en GeoServer, deberemos acceder a WMS en la interfaz web:
Una vez aquí, buscaremos el apartado Límites de consumo de recursos, donde podremos modificar tanto la memoria como el tiempo máximos de renderizado:
Número de llamadas concurrentes
Por otro lado, es interesante limitar el número de peticiones simultáneas que ha de manejar GeoServer. El número recomendado de peticiones simultáneas para GeoServer es 20.
La manera más sencilla de conseguir esto es limitar el número de peticiones en Tomcat.
Para limitar el número de peticiones simultáneas en Tomcat hay que modificar el fichero $TOMCAT/conf/server.xml. Aquí buscaremos el conector con el puerto 8080 y añadiremos el parámetro maxThreads para determinar el número máximo de peticiones:
<Server port="8005" shutdown="SHUTDOWN"> ... <Connector port="8080" protocol="HTTP/1.1" ConnectionTimeout="20000" redirectPort="8443" maxThreads="20" minSpareThreads="20" /> ... </Server>
En el caso de que se esté utilizando Tomcat dentro del servidor Apache y se esté utilizando el conector AJP, el parámetro maxThreads se deberá añadir en el conector adecuado:
<Server port="8005" shutdown="SHUTDOWN"> ... <Connector port="8009" protocol="AJP/1.3" connectionTimeout="60000" redirectPort="8443" maxThreads="20" minSpareThreads="20" /> ... </Server>
Note
En caso de no saber si se está utilizando el conector AJP, se recomienda establecer los límites igualmente.
Warning
Es MUY importante especificar el valor de connectionTimeout, ya que para el conector AJP por defecto es infinito, lo cual puede resultar en un bloqueo del servidor si se reciben demasiadas peticiones simultáneamente.
Además, también es posible controlar el número de peticiones simultáneas desde GeoServer. Para ello hay que utilizar el módulo control-flow, que no se encuentra instalado por defecto en GeoServer.
Para instalarlo primero hay que descargarlo de la web de GeoServer, en la sección de descargas tras seleccionar la versión de GeoServer en el apartado Extensiones. El fichero comprimido que se descarga contiene otro fichero llamado control-flow-<version>.jar que hay que copiar en $TOMCAT/webapps/geoserver/WEB-INF/lib.
Una vez instalado el módulo, para configurarlo hay que crear un fichero de configuración en $TOMCAT/webapps/geoserver/data con el nombre controlflow.properties. En dicho fichero escribiremos el siguiente contenido para limitar el número de peticiones simultáneas de imágenes para el servicio WMS:
ows.wms.getmap=16
El número de peticiones que asignamos al servicio WMS depende del uso que se vaya a hacer de nuestro servidor. La configuración anterior de Tomcat únicamente admite 20 peticiones simultáneas en total. En el caso de que usemos el servidor principalmente para WMS podemos, como en el ejemplo, dedicar 16 al servicio WMS y dejar 4 peticiones simultáneas para cualquier otro servicio o petición a GeoServer.
En la documentación oficial de GeoServer (en inglés) se puede encontrar mayor detalle sobre la configuración del módulo control-flow.