Performance 地理服务器和线程数

Performance 地理服务器和线程数,performance,geoserver,Performance,Geoserver,我们使用的是Geoserver,在大量用户的生产环境中,我们遇到了性能问题 我们已经做了一些负载测试:250、150和20个线程。我们注意到Geoserver使用20个线程比使用150个线程工作得更好,并且当线程数增加(150或250)时,性能会下降 这正常吗?Geoserver如何管理用户请求?Geoserver是否使用异步策略来管理用户请求 提前谢谢 bsh听起来很正常。线程(和cpu上下文开关)不是免费的,在某个时刻,您将花费更多的时间在开关线程上,而不是实际做任何有用的事情。通常情况下,

我们使用的是Geoserver,在大量用户的生产环境中,我们遇到了性能问题

我们已经做了一些负载测试:250、150和20个线程。我们注意到Geoserver使用20个线程比使用150个线程工作得更好,并且当线程数增加(150或250)时,性能会下降

这正常吗?Geoserver如何管理用户请求?Geoserver是否使用异步策略来管理用户请求

提前谢谢


bsh听起来很正常。线程(和cpu上下文开关)不是免费的,在某个时刻,您将花费更多的时间在开关线程上,而不是实际做任何有用的事情。通常情况下,最好将数量少得多的线程(核心数*2通常是合理的)与某种前端队列相结合,该队列将接受连接并将其保持到工作线程空闲为止。

线程越多,服务器上的负载越重。看

Geoserver性能受到许多因素的影响。我的建议是看看每一个,看看瓶颈在哪里发生

以下是一系列问题,可帮助您找到正确的解决方法:

  • 你的机器的规格是什么?它应该有一个SSD。

  • 您是否正在生成您的互动程序?或者它们是预播的

    • 如果你是预播,那是在运行吗
      注意:预播种有助于但会影响系统,因此最好在生产之外进行。

  • 如果是postgis,您的数据来源是什么?您是否使用空间索引

    • PostgreSQL/postgis在同一台机器上吗

  • 您正在生成多少种类型的瓷砖

    注意:您可能正在生成不需要/不使用的额外磁贴

  • 你用什么


  • 有了更多的细节,我可以帮助您。

    这里是一些真实世界的用例统计数据;在生产过程中,对于户外市场上为“谷歌地图”式用户提供服务的移动/网络应用程序,我的公司已经测试了各种配置(本问题的一位撰稿人讨论了其中的一些配置),这些配置也支持本问题的另一位撰稿人的观察结果)

    我们需要每秒超过5000个请求(“qps”)的负载,并且由于我们的Geoserver实例普遍以接近100个qps的速度超过,我们需要在水平和垂直方向上扩展到50多个Geoserver实例

    参数:主要是矢量源,本地PostGIS数据库每个都小于2tb,没有大于1M的表记录(如果大于1M,则节点间的简化几何体间距大于1M),60%-40%-10%的WMS/WMTS/WFS请求,谷歌云托管服务器,每个32核,ssd驱动器群集到4Tb

    qps的瓶颈似乎是Geoserver本身。(造型、重投影,以及随之而来的所有细节)。我并不是说它写得很糟糕,但车越重,开得越慢

    如果我们使用GO或python+/-gdal复制wfs请求以直接访问postgis数据,我们将获得比geoserver更快的吞吐量(每个实例最多1000个qps,其中postgis成为瓶颈)

    我们自制的基于PostGIS的Java微服务也是如此,它从PostGIS创建pbf/mvt磁贴,速度非常快,大约1000 qps

    对于我们来说,Nginx的性能略好于php(~110qps vs~89qps),但这可能是apache配置的结果

    我们将从这里走向何方?在我们所有的生产用例中,为我们的用户提供小型切分sqlite/mbtile数据库(矢量或光栅)。。。并使用自定义代码维护它们。。。更具性能和可扩展性


    我们可以为geoserver编写一个Java插件,将GeoWebCache TMS磁贴推送到一个专为slippy z/x/y调用设计的Google存储桶中。。。通过这种方式,我们可以更轻松地使用Geoserver工具维护带有更新等的平铺金字塔。

    您知道这个问题是在2011年提出的,对吗?虽然OP没有接受答案,但他们可能也不在同一状态,因此他们不太可能提供更多细节。。。如果您提到其他用户可能会从中受益的其他详细信息,请分享您的Nginx设置?这是我们应用程序中当前的瓶颈。谢谢