0

我们正在使用地理服务器,并且我们在大量用户的生产中遇到了性能问题。

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

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

提前致谢。

bsh

4

3 回答 3

1

听起来很正常。线程(和 cpu 上下文切换)不是免费的,并且在某些时候,您将花费更多的时间在切换线程上折腾,而不是实际做任何有用的事情。通常最好拥有更少数量的线程(核心数 * 2 通常是合理的)与某种前端队列相结合,该队列将接受连接并保持它直到工作人员空闲。

于 2011-03-15T18:44:00.943 回答
1

以下是一些真实的用例统计数据;在生产中,对于为户外市场提供“google-maps”风格用户的移动/网络应用程序,我的公司已经测试了各种配置(theonlysandman讨论了其中的几个,该问题的贡献者),这也支持Tyler的观察埃文斯,也是这个问题的贡献者)。

我们需要大于 5000 个请求/秒 ('qps) 的负载,并且由于我们的 Geoserver 实例普遍达到每个近 100 qps,我们需要水平和垂直扩展至超过 50 个 Geoserver 实例。

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

qps 的瓶颈似乎是 Geoserver 本身。(造型、重投影,以及随之而来的所有细节)。我并不是在提倡它写得不好,但是汽车越重,它可能会开得越慢。

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

我们基于 PostGIS 的自制 Java 微服务也是如此,它从 postgis 创建 pbf/mvt 切片,它也非常快,大约 1000 qps。

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

我们从这里去哪里?在我们所有的生产用例中,对于我们的用户来说,提供微型分片 sqlite/mbtile 数据库(矢量或光栅)......并使用自定义代码维护它们......具有更高的性能和可扩展性。

我们可以为 geoserver 编写一个 Java 插件,将 GeoWebCache TMS 瓦片推送到为滑动 z/x/y 调用而设计的 Google 存储桶中……这样我们可以更轻松地使用 Geoserver 工具维护具有更新等的瓦片金字塔。

于 2017-08-15T18:47:05.623 回答
0

线程越多,服务器上的负载就越大。参见维基百科关于 thrasing 的文章。

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

以下是一个问题列表,可帮助您走上正确的道路:

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

  2. 您是否正在生成您的瓷砖?或者他们是预先播种的?

    • 如果他们是你预播种,那是在运行吗?
      注意:预播种有助于但会破坏系统,因此最好停止生产。

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

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

  4. 您正在生成多少种类型的瓷砖?

    注意:您可能会生成不需要/使用的额外图块。

  5. 你使用GeoWebCache吗?

有更多的细节,我可以帮助你。

于 2016-03-15T18:24:33.303 回答