Tengo que reconocerlo. Esto está siendo mucho más difícil de lo que yo pensaba, ya que me estoy encontrando con muchos problemas, al configurar mi servidor en producción me estoy dando cuenta que hay mucha información contradictoria, y mucha más que es demasiado antigua. Voy a intentar resumir los pasos que voy siguiendo y que me han funcionado (pero recordar mi máquina, Ubuntu Server 9.10 de 32bits, en otras configuraciones… ¡quién sabe si esto funcionará!).
Allá van las mejoras que he incluido al servidor de mapas:
- Confirmar que la maquina virtual que usamos es la de Sun y no la OpenJDK mediante el comando:
sudo update-alternatives --config java Hay 2 opciones para la alternativa java ( proporcionando /usr/bin/java). Selección Ruta Prioridad Estado ------------------------------------------------------------ 0 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 modo automático 1 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 modo manual * 2 /usr/lib/jvm/java-6-sun/jre/bin/java 63 modo manual
Con este comando te pedirá que le des el numero de la máquina a utilizar, y como ves en mi caso ya está elegida correctamente.
Una vez elegida, entra en la web de administración de Geoserver, y en la sección “Estado del Servidor“, y mirar que maquina virtual usa en el apartado “Versión de la JVM“, pone algo como “OpenJDK”, entonces vamos mal. Pero no hay que tirar la toalla aún.
El problema suele ser que la variable de entorno “JAVA_HOME” no está definida, como podemos consultar con el comando “env”:linux@svrmapas:~$ env TERM=xterm SHELL=/bin/bash XDG_SESSION_COOKIE=XXX SSH_CLIENT=192.168.XXX.XXX 4809 22 SSH_TTY=/dev/pts/1 USER=linux LS_COLORS=rs=0:di=01;34:ln=01;36:hl=44;37:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36: MAIL=/var/mail/linux PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games PWD=/home/linux LANG=es_ES.UTF-8 SHLVL=1 HOME=/home/linux LOGNAME=linux SSH_CONNECTION=192.168.XXX.XXX 4809 192.168.XXX.XXX 22 LESSOPEN=| /usr/bin/lesspipe %s LESSCLOSE=/usr/bin/lesspipe %s %s _=/usr/bin/env
Vaya, si no tenemos definida la variable, ¿donde coge el Tomcat la ruta para la máquina virtual de Java?. Para desvelar este misterio, sólo miramos el script de arranque de Tomcat nos encontramos unas líneas como estas:
# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not # defined in $DEFAULT) JDK_DIRS="/usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm"
Como puedes ver, primero mira si existe la máquina de código libre, que no nos interesa para nada, y luego el resto (en mi caso, la maquina virtual de Java es el segundo directorio). En este punto tienes dos opciones, definir la variable de entorno “JAVA_HOME” o borrar la primera ruta de de la variable “JDK_DIRS”. Pero si lo hacemos elegantemente, solo tenemos que ir a el fichero “/etc/profile” y añadir estas lineas:
# Ten en cuenta que tu ruta a la maquina virtual puede cambiar export JAVA_HOME=/usr/lib/jvm/java-6-sun export JRE_HOME=${JAVA_HOME}/jre export PATH=$PATH:${JAVA_HOME}/bin - Poner el log en modo producción, lo cual hace que sea menos “verboso”. Simplemente desde el interfaz web de Geoserver, en “Configuración global>Perfil de registro“, poner “Production” y aplicar.
- Dar recursos de sobra a Tomcat. No me seáis rácanos y dedicar una máquina completa al servidor, ya que va a ser muy exigente en cuanto a RAM. Para dar más recursos, tendremos que modificar los parámetros con los que arranca la maquina virtual que contiene a Tomcat, dentro del fichero “/etc/init.d/tomcat6“, buscaremos la línea que rellena la variable “JAVA_OPTS“:
# Default Java options # Set java.awt.headless=true if JAVA_OPTS is not set so the # Xalan XSL transformer can work without X11 display on JDK 1.4+ # It also looks like the default heap size of 64M is not enough for most cases # so the maximum heap size is set to 128M if [ -z "$JAVA_OPTS" ]; then JAVA_OPTS="-jvm server -Djava.awt.headless=true -Xms1024m -Xmx1024m -XX:NewRatio=2 -XX:+AggressiveOpt -XX:MaxPermSize=128m -XX:SoftRefLRUPolicyM$ fiEsta configuración, que parece muy complicada, indica que Tomcat arranque con una máquina virtual con los siguientes parámetros:
- -jvm server: Arranque de una máquina virtual en modo servidor, que da más rendimiento.
- -Djava.awt.headless=true: Usar librerías AWT pero sin usar una ventana (no se muy bien porqué pero lo recomiendan en todos los foros).
- -Xms1024m -Xmx1024m: Usará como mínimo 1Gb de memoria RAM y también 1Gb como máximo.
- -XX:NewRatio=2 -XX:MaxPermSize=128m -XX:SoftRefLRUPolicyM$: Como limpiar los objetos que se tienen en memoria…
- -XX:+AggressiveOpt: Optimizaciones experimientales.
Gran parte de estas recomendaciones, puedes leerlas más profundamente en el siguiente documento en formato OpenOffice.
- Instalar las extensiones “Java Advanced Imaging” para Java, las cuales nos ofrecen mayor rendimiento en el manejo de gráficos, que es parte de lo que hace nuestro servidor de mapas: traducir de formatos cartográficos a imágenes.
Primero, bajamos las librerias, donde hay que tener cuidado con elegir las correctas para tu sistema operativo y plataforma (x64 para sistemas de 64bits o i585 para sistemas de 32bits), en mi caso es un 32bits para una máquina linux:linux@svrmapas:~$ wget http://download.java.net/media/jai/builds/release/1_1_3/jai-1_1_3-lib-linux-i586-jdk.bin
Ahora toca instalar:
linux@svrmapas:~$ sudo cp jai-1_1_3-lib-linux-i586-jdk.bin /usr/lib/jvm/java-6-sun/ linux@svrmapas:~$ cd /usr/lib/jvm/java-6-sun/ linux@svrmapas:/usr/lib/jvm/java-6-sun$ sudo sh jai-1_1_3-lib-linux-i586-jdk.bin # Aceptamos la licencia Do you agree to the above license terms? [yes or no] yes Unpacking... Checksumming... 0 0 Extracting... UnZipSFX 5.31 of 31 May 1997, by Info-ZIP (Zip-Bugs@lists.wku.edu). inflating: COPYRIGHT-jai.txt inflating: DISTRIBUTIONREADME-jai.txt inflating: LICENSE-jai.txt inflating: THIRDPARTYLICENSEREADME-jai.txt inflating: UNINSTALL-jai inflating: jre/lib/i386/libmlib_jai.so inflating: jre/lib/ext/jai_core.jar inflating: jre/lib/ext/jai_codec.jar inflating: jre/lib/ext/mlibwrapper_jai.jar Done. linux@svrmapas:/usr/lib/jvm/java-6-sun$
Ahora volvemos a visitar nuestra web de control de Geoserver, en el apartado “Estado del servidor”, busca la línea “Native JAI” y que esté a “true”.
- Instalar las extensiones “JAI Image I/O” de Java para ayudar aun más la escritura y lectura de las imágenes. Solo hay que seguir unos pasos similares que con el paquete anterior, aunque con algún cambio:
linux@svrmapas:~$ wget http://download.java.net/media/jai-imageio/builds/release/1.1/jai_imageio-1_1-lib-linux-i586-jdk.bin linux@svrmapas:~$ sudo cp jai_imageio-1_1-lib-linux-i586-jdk.bin /usr/lib/jvm/java-6-sun/ linux@svrmapas:~$ cd /usr/lib/jvm/java-6-sun/ linux@svrmapas:/usr/lib/jvm/java-6-sun$ sudo su root@svrmapas:/usr/lib/jvm/java-6-sun-1.6.0.15# export _POSIX2_VERSION=199209 root@svrmapas:/usr/lib/jvm/java-6-sun-1.6.0.15# sh jai_imageio-1_1-lib-linux-i586-jdk.bin # Acepta la licencia Unpacking... Checksumming... 0 0 Extracting... UnZipSFX 5.31 of 31 May 1997, by Info-ZIP (Zip-Bugs@lists.wku.edu). inflating: COPYRIGHT-jai_imageio.txt inflating: DISTRIBUTIONREADME-jai_imageio.txt inflating: ENTITLEMENT-jai_imageio.txt inflating: LICENSE-jai_imageio.txt inflating: THIRDPARTYLICENSEREADME-jai_imageio.txt inflating: UNINSTALL-jai_imageio inflating: jre/lib/i386/libclib_jiio.so inflating: jre/lib/ext/jai_imageio.jar inflating: jre/lib/ext/clibwrapper_jiio.jar Done.
Y tras reiniciar Tomcat, ya tendremos de nuevo disponibles estas nuevas librerías. Como siempre, si queremos ver si todo ha ido bien, solo tendremos que ir a “Geoserver>Estado del servidor” y allí buscar la línea “JAI ImageIO nativo” y ver que se ha puesto a “true”.
Al final tendremos algo así: - Cambiar el directorio de datos de Geoserver. Es una buena opción, para facilitar actualizaciones y poder trabajar sin miedo a que una actualización machaque nuestra configuración. Para esto hay que buscar donde Tomcat despliega las apliacaciones, en el directorio: “/var/lib/tomcat6/webapps/geoserver/WEB-INF/” ahora dentro de la carpeta encontraremos un fichero muy importante “web.xml”. en el se pueden tocar varios parámetros, pero nos centraremos en la siguiente parte:
<context-param> <param-name>GEOSERVER_DATA_DIR</param-name> <param-value>C:\eclipse\workspace\geoserver_trunk\cite\confCiteWFSPostGIS</param-value> </context-param>
Como ves, esta comentado, quita los comentarios y cambia la ruta (curiosamente la versión linux tiene una dirección Windows (?) que obviamente no va ha funcionar).
Una buena política es poner un segundo disco, si se puede, que favorecerá mucho el acceso paralelo a datos y al servidor.
Referencias de este artículo:
- https://jai.dev.java.net/
- https://jai-imageio.dev.java.net/
- http://docs.geoserver.org/2.0.x/en/user/production/index.html
- http://www.ubuntu-es.org/?q=node/81451
- http://grimmeister.wordpress.com/2008/11/10/revving-up-geoserver-on-ubuntu-hh-lts/
- http://geoserver.org/display/GEOSDOC/2.5+GeoServer+Data+Directory
- http://www.mail-archive.com/users@tomcat.apache.org/msg33825.html
- http://download.osgeo.org/osgeo/foss4g/2009/SPREP/3Fri/Parkside%20Auditorium/1300/fri%20paud%201400%20aime.odp





Hace tiempo que comenté por el foro, que ya no quería formar parte de 


