设为首页 收藏本站
查看: 1485|回复: 0

[经验分享] 优化GeoServer的运行

[复制链接]

尚未签到

发表于 2017-3-1 07:05:54 | 显示全部楼层 |阅读模式
    GeoServer是著名的、遵循OGC规范的、开源的WebGIS实现之一,其应用Spring的Web MVC作为OGC服务外部HTTP请求处理框架,把HTTP请求分派给WMS、WFS、WCS等服务实现,这些服务实现则基于Geotools库提供的功能来完成。以下以GetMap HTTP请求总结说明派发过程。(OGC服务之外,GeoServer的管理及其他一些功能实现则基于Struts架构)。
  Spring Web MVC的核心控制类org.springframework.web.servlet.DispatcherServlet,也就是前置控制器(Pre Control),任何HTTP请求都可以发送给这个Servlet,做一些HTTP请求的通用处理(比如文件上载)后,通过合适的派发机制转发给不同的Spring容器中的Bean,也就是不同业务逻辑、服务处理的控制器(Logic Control),由这些控制器结合不同模型(Model),如空间数据模型、属性数据模型、地图样式模型等,进行处理,形成结果模型,并经DispatcherServlet返回客户端。从而在Spring的Web MVC的基础上形成GeoServer的MVC架构实作。
  一、GeoServer的Web工程的配置文件web.xml中说明了那些URL要传递到DispatcherServlet:
  1、Servlet声明
  <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>   
    </servlet>
  2、URL Mapping
  <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/wms/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/wcs/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/wfs/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/ows/*</url-pattern>
    </servlet-mapping>
    类似的还有一些,请参阅web.xml。
  二、不同GeoServer的工程Spring配置文件applicationContext.xml中通过org.springframework.web.servlet.handler.SimpleUrlHandlerMapping说明不同的URL路径需要不同的业务逻辑控制器做进一步处理。
  工程wms、wfs、web、wcs、wcs1_1、rest、gwc等,都有类似的说明,并说明了GeoServer的控制器dispatcher、putStylesWrapper、filePublisher、restWrapper、gwcRestDispatcher、geowebcacheDispatcher、geowebcacheDispatcher等做进一步处理。
  其中OGC的GetMap请求是由dispatcher做处理的,其在main工程的配置文件applicationContext.xml中声明如下:
  <bean id="dispatcher" class="org.geoserver.ows.Dispatcher">
  GeoServer的Dispatcher类扩展org.springframework.web.servlet.mvc.AbstractController,并通过AbstractController实现Spring DispatcherServlet要求的接口org.springframework.web.servlet.mvc.Controller。
    三、GeoServer Dispatcher从HTTP请求中取得要访问的服务和要执行的操作以及操作参数,并调用对应的Bean服务方法。http://localhost:8080/geoserver/wms?bbox=-74.01199448397661,40.70732689845813,-74.00841053684495,40.71216558957052&styles=&Format=application/openlayers&request=GetMap&version=1.1.1&layers=tiger:poi&width=457&height=550&srs=EPSG:4326,该请求中wms是要请求的服务,GetMap是请求的服务方法,tiger:poi是要访问的地理数据。Dispatcher找到到服务实现封装类DefaultWebMapService,调用其getMap方法,getMap方法进一步找到服务方法的实现类GetMap,由GetMap找到合适的GetMapProducer实现,并调用该Producer类的相关方法,形成最终要返回到客户端的结果。GetMapProducer的子类有很多,如PNGMapProducer、PDFMapProducer等,根据请求的不同获得不同的Producer并生成不同的结果。相关Producer一般以GeoTools类库为基础实现。
  GeoServer运行优化可以在几个层次展开,1、硬件、操作系统层次;2、java运行环境层次;3、应用服务器层次;4、空间数据组织管理层次。
  硬件当然是内存越多越好,CPU运行效率越高、CPU数量越多越好。java程序一般是比较消耗内存的,GeoServer管理大量空间和属性数据更增加了内存的使用量。但是内存使用也有限制,windows程序的4G进程空间内存分配是操作系统占用2G,应用程序2G;linux程序的分配是操作系统1G,应用程序3G,所以,一般linux上Java程序的堆栈最大值可以比Windows大。CPU数量多则可以充分发挥Java多线程运行的优势,CPU运行效率高则计算速度快,对于GIS需要大量的空间运算来说,能显著提高用户的响应。如果使用WMS服务即时获取图片,性能优异的显卡能很好的提高地图的渲染速度。
  Java运行环境,则可以参考GeoServer文档,http://docs.geoserver.org/1.7.4/user/production/container.html#optimize-your-jvm ,配置Java虚拟机,-server按服务器模式运行,预编译字节码和优化字节码; -Xmx1024M -Xms48m,设置最小、最大堆栈,建议物理内存允许的条件下,设置尽可能大的堆栈; -XX:SoftRefLRUPolicyMSPerMB=36000,尽量延缓软引用缓存对象被垃圾回收; -XX:MaxPermSize=128m,增加Java类自身数据描述对象的存储空间,因GeoServer涉及到的类相对多,加之存身的容器(Tomcat等)也有很多其他类; -XX:XX:+UseParallelGC,开启并行垃圾回收。
    应用服务器层次的优化,涉及如下方面:GeoServer所在的容器、GeoServer的服务策略设置、可以使用的缓存以及日志输出等方面。Tomcat、Jetty等分别有不同的优化方案,可以参阅相关文档;服务策略设置可以是:SPEED BUFFER File PARTIAL-BUFFER,可以在web.xml中设置,SPEED是最快的策略;可以使用的缓存则包括GeoWebCache、TileCache等,可以参阅相关文档,获得详细的配置和集成说明;日志则输出越多,服务响应就越慢。
    GeoServer使用GeoTools工具包实现相关WMS、WFS等服务,GeoTools则使用JTS作为其空间对象模型,空间数据的内存缓存以及空间索引的使用则可以显著的提高服务的性能。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-348494-1-1.html 上篇帖子: 搭建maven服务器(repository)方法中文翻译 下篇帖子: [CruiseControl]在Linux上的配置实例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表