我们使用的是Geoserver,在有大量用户的生产环境中,我们遇到了性能问题。
我们已经做了一些负载测试: 250、150和20个线程。我们已经注意到,Geoserver使用20个线程比使用150个线程工作得更好,并且当线程数量增加(150或250)时,性能会下降。
这正常吗?Geoserver如何管理用户请求?Geoserver是否使用异步策略来管理用户请求?
提前谢谢。
bsh
发布于 2011-03-16 02:44:01
听起来很正常。线程(和cpu上下文切换)不是空闲的,在某些时候,您将花费更多的时间在切换线程上,而不是实际做任何有用的事情。通常情况下,更好的做法是拥有数量少得多的线程(核心数量*2通常是合理的),并使用某种类型的前端队列来接受连接并将其保持到工作线程空闲。
发布于 2017-08-16 02:47:06
这里有一些真实世界的用例统计数据;在生产中,对于为户外市场的‘谷歌地图’风格的用户服务的移动/web应用程序,我的公司已经测试了各种配置(这个问题的贡献者theonlysandman讨论了其中的几个配置),这些配置也支持Tyler Evans的观察结果)。
我们需要超过5000个请求/秒(' qps )的负载,并且由于我们的Geoserver实例普遍超过每个实例近100 qps,我们需要水平和垂直扩展到50个以上的Geoserver实例。
参数:主要是矢量源,本地PostGIS数据库每个都小于2tb,没有表> 1M记录(或者如果大于1M,节点上的简化几何结构> 1m ),60%-40%-10%wms/WMTS/WFS请求,谷歌云托管服务器,每个32核,固态硬盘驱动器集群到4Tb。
qps的瓶颈似乎是Geoserver本身。(样式,重新投影,随之而来的所有细节)。我并不是主张它写得很差,但车越重,它可能会开得越慢。
如果我们使用GO或python +/- gdal复制wfs请求来直接访问postgis数据,我们将获得比geoserver更快的吞吐量(每个实例高达1000QPS或更多,其中PostGIS成为瓶颈)。
我们基于PostGIS的自制Java微服务也是如此,它从postgis创建pbf/mvt瓦片-它也非常快-大约在1000QPS。
对于我们来说,Nginx的性能略好于php (~110QPS比~89QPS),但这可能是apache配置的结果。
我们从这里去哪儿?在我们所有的生产用例中,对于我们的用户来说,提供小型的分片sqlite/mbtile数据库(矢量或栅格)...并使用自定义代码维护它们...性能更好,可伸缩性更强。
我们可以为geoserver编写一个Java插件,将GeoWebCache TMS瓦片推送到Google Storage Bucket中,该存储桶专为灵活的z/x/y调用而设计。通过这种方式,我们可以使用Geoserver工具更容易地维护带有更新等的瓦片金字塔。
发布于 2016-03-16 02:24:33
线程越多,服务器上的负载就越重。请参阅WikiPedia article on thrasing.
Geoserver的性能受很多因素的影响。我的建议是看一看每一个,看看瓶颈出现在哪里。
下面是一个问题列表,可以让你走上正确的道路:
- If they you are pre-seeding, is that running? 注释:预先播种有助于但锤击系统,因此最好在生产之外完成。
- Is PostgreSQL/postgis on the same machine?
注意:您可能会生成不需要/使用的额外磁贴。
有了更多细节,我可以帮你。
https://stackoverflow.com/questions/5316426
复制相似问题