目录

上一个主题

12. 在生产环境中调整GeoServer

下一个主题

12.2. 删除未使用的服务


12.1. 调整Java

当我们安装Tomcat时,我们没有使用JVM设置。Tomcat的启动脚本被配置为能够快速启动, 但它当然不能满足应用程序的所有要求。调整Java运行时参数可以大大提高性能。 在JVM启动时可以设置许多运行时参数。在下一节中, 您将设置对GeoServer性能最有效的参数。请注意,这些值可能因站点上的硬件配置而异。

不幸的是,在Java应用程序的参数优化过程中没有捷径可走。 虽然本章中介绍的选项已经在GeoServer上进行了广泛的测试, 并且是核心开发人员推荐的,但是您应该注意, 最佳选项可能因您的场景而异。了解每个参数如何工作的宝贵资源是 http://www.oracle.com/technetwork/javase/tech/vmoptionsjsp-140102.html

12.1.1. 操作时间–配置Java运行时参数

在 第二章 , GeoServer入门 ,我们创建了用于在Linux上自动启动GeoServer的启动脚本。 现在您将编辑脚本并为Java运行时参数添加适当的值。以下步骤将简要介绍每个参数:

1.打开启动文件进行编辑:

~$ sudo vi /etc/init.d/tomcat

vi是Linux上最著名的编辑器之一。系统管理员和开发人员经常喜欢它的灵活性和强大的功能。 另一方面,它提供了一个陡峭的学习曲线,新用户可能会发现它的命令模式/插入模式, 双重性质的不舒服。在Debian发行版上,您可以找到nano,它是一个更为用户友好的控制台编辑器。 不用说,如果你能访问桌面环境,你可以使用一个强大的IDE,比如Gedit或Jedit。

2.找到以下行;如果您没有修改在其中创建的脚本 第二章 , GeoServer入门 ,应该在第16行:

export JAVA_OPTS="-Djava.awt.headless=true"

3.在它前面插入一个新行。要调整的第一个参数是 HEAP 大小。这实际上取决于系统上的可用内存。 如图所示,2GB是一个不错的数字。如果您将其托管在总内存大小有限的小型云计算机上, 则可能需要减少它。在新行中键入以下值:

HEAP="-Xms2048m -Xmx2048m"

4.现在添加第二行并插入以下代码。您正在为GeoServer创建的新对象保留空间。 这些值不应超过堆大小的四分之一,因此如果需要减少堆,请按比例减少它们:

NEW="-XX:NewSize=256m -XX:MaxNewSize=256m"

5.添加一行并插入一个值,以避免运行由RMI引起的Full GC 太频繁了 每10分钟一次应该足够了:

RMIGC="-Dsun.rmi.dgc.client.gcInterval=600000 -Dsun.rmi.dgc.server.gcInterval=600000"

6.添加一行以使用并行垃圾收集器,该垃圾收集器启用多线程垃圾收集, 并在存在两个以上内核时提高性能:

PGC="-XX:+UseParallelGC"

7.现在增加永久空间的最大大小(或 permgen )分配给GeoServer。 这是堆的一部分 字节码 类已存储。GeoServer使用大量类, 因此可能会很快耗尽空间,导致内存不足错误:

PERM="-XX:PermSize=256m -XX:MaxPermSize=256m"

8.最后,添加一些跟踪以帮助我们防止事情误入歧途:

DEBUG="-verbose:gc -XX:+PrintTenuringDistribution"

9.始终在 内存不足(0M) 上转储。 除非触发,否则它不会花费任何空间:

DUMP="-XX:+HeapDumpOnOutOfMemoryError"

10.最后一组用于强制服务器JVM。在大多数Linux系统上,这是默认设置, 但显式设置不会造成任何危害: SERVER=“-server”

11.现在转到第XX行,并添加您在JAVA_OPTS中设置的所有值 变量。 JVM在启动时读取它,并将使用您的值

export JAVA_OPTS="-Djava.awt.headless=true $HEAP $NEW $RMIGC $PGC $PERM $DEBUG $DUMP $SERVER"

12.保存文件并重新启动Tomcat。

刚刚发生了什么?

您自定义了托管GeoServer的Java运行时环境。 如果您使用的是Windows计算机,则可以在Tomcat配置控制台中插入值。 转到Java选项卡,然后将每个参数插入“ Java选项”文本框中的新行。 您可以在称为“初始内存池”和“最大内存池”的文本框中插入堆大小。

image259

图 12.1 image259

12.1.2. 行动时间-安装本机JAI

Java Advanced Imaging (JAI) 是Oracle开发的用于高级图像处理的库。 GeoServer无需它即可运行, 因为它随附了纯Java版本的JAI。 安装JAI可以大大提高处理图像时的性能, 即栅格格式数据。 如果您不打算使用空间栅格数据, 当您索要地图时,GeoServer可以使用图像格式,例如, 在WMS GetMap 请求中,因此将它放在生产站点上很值得:

1.从 http://download.java.net/media/jai/builds/release/1_1_3/

~$ wget http://download.java.net/media/jai/builds/release/1_1_3/jai-1_1_3-lib-linux-amd64-jre.bin

2.将文件复制到安装JRE的文件夹中,然后运行它:

~$ sudo cp jai-1_1_3-lib-linux-amd64-jre.bin /usr/lib/jvm/ jre1.7.0_04/.
~$ cd /usr/lib/jvm/jre1.7.0_04/
~$ sudo sh jai-1_1_3-lib-linux-amd64-jre.bin

3.程序会提示您输入许可协议; 向下滚动可阅读该协议并在最后接受该协议:

UnZipSFX 5.50 of 17 February 2002, 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: lib/amd64/libmlib_jai.so
    inflating: lib/ext/jai_core.jar
    inflating: lib/ext/jai_codec.jar
    inflating: lib/ext/mlibwrapper_jai.jar
Done

4.现在复制 JAI-IO 包装自 http://download.java.net/media/jai-imageio/builds/release/1.1/

~$ wget http://download.java.net/media/jai-imageio/builds/ release/1.1/jai_imageio-1_1-lib-linux-amd64-jre.bin

5.再次,将文件复制到安装JRE的文件夹中,然后运行它。 如果你在Ubuntu上运行GeoServer,你应该添加一个环境变量, 如下所示。在这种情况下,您也需要接受许可协议:

~$ sudo cp jai_imageio-1_1-lib-linux-amd64-jre.bin /usr/lib/jvm/ jre1.7.0_04/. ~$ cd /usr/lib/jvm/jre1.7.0_04/
~$sudo su
~$ export _POSIX2_VERSION=199209
~$ sh jai_imageio-1_1-lib-linux-amd64-jre.bin

UnZipSFX 5.50 of 17 February 2002, 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: lib/amd64/libclib_jiio.so
    inflating: lib/ext/jai_imageio.jar
    inflating: lib/ext/clibwrapper_jiio.jar
Done.

6.现在可以删除已下载的两个存档:

~$ rm jai_imageio-1_1-lib-linux-amd64-jre.bin
~$ rm jai-1_1_3-lib-linux-amd64-jre.bin

7.停止Tomcat服务:

~$sudo service tomcat stop

8.现在删除JAI的纯Java版本:

~$ cd /opt/apache-tomcat-7.0.27/webapps/geoserver/WEB-INF/lib/
~$ sudo rm jai_codec-1.1.3.jar
~$ sudo rm jai_core-1.1.3.jar
~$ sudo rm jai_imageio-1.1.jar
  1. 重新启动Tomcat服务:

    ~$sudo service tomcat start

10.打开GeoServer Web界面,然后转到“服务器状态”页面。 现在您可以看到它正在使用 Native JAI

image263

图 12.2 image263

刚刚发生了什么?

您安装了用于高级图像处理的JAI库。这将使GeoServer更快地编写raster, 例如,在准备对 GetMap 请求。尽管调整Java可以极大地提高服务器性能, 但还有一个经常被遗忘的小步骤:删除不必要的特性。