在 Web 端地理信息系统应用中,并发访问大规模 GIS 数据发布的服务时(例如对千万级矢量数据进行地图出图、数据查询或空间分析),常因线程资源耗尽导致 GIS 服务器性能瓶颈,进而引发管理页面响应延迟或无法访问的问题。为保障 GIS 服务器在该场景下能够正常使用,通常建议您通过增大 JVM 最大堆内存、tomcat 最大线程数 maxThreads 等方式来提升机器资源使用效率。然而,当机器资源有限时,将无法简单通过上述方法解决。面对上述困境,iServer 提供了一种并发请求控制机制,可以有效调配业务中使用的线程从而保证服务器的整体访问性能。该机制默认开启,如需关闭或调整相关参数,您可以修改 iServer 配置文件:【SuperMap iServer 安装目录】\webapps\iserver\WEB-INF\web.xml。
并发请求控制机制相关配置如下所示:
<filter> <filter-name>requestLimitFilter</filter-name> <filter-class>com.supermap.server.host.webapp.ConcurrentRequestLimitFilter</filter-class> <async-supported>true</async-supported> <init-param> <param-name>enableRequestLimit</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>limitUrls</param-name> <param-value>/iserver/services/.*/rest.*;/iserver/services/.*/wms.*;/iserver/services/.*/wfs.*;/iserver/services/.*/arcgisrest.*</param-value> </init-param> <init-param> <param-name>maxConcurrentRequest</param-name> <param-value>160</param-value> </init-param> <init-param> <param-name>maxWaitTime</param-name> <param-value>60000</param-value> </init-param> </filter> <filter-mapping> <filter-name>requestLimitFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
其中,
- enableRequestLimit:iServer 是否开启并发请求控制机制,默认为 true。如需要关闭此机制,请设置为 false。
- limitUrls:需要进行并发请求控制的服务 URL 地址,通过正则表达式表达,多个正则表达式之间使用;分割。默认值为 /iserver/services/.*/rest.*;/iserver/services/.*/wms.*;/iserver/services/.*/wfs.*;/iserver/services/.*/arcgisrest.*,即 iServer 默认对 rest、 restjsr、wms、wfs、arcgisrest 接口的服务进行并发请求控制。
- maxConcurrentRequest:被控制的服务 URL 可接收的最大并发请求数,默认为 160。相同 maxThreads 和 maxWaitTime 时,该值设置得越小,用于访问服务 URL 进行业务处理的线程越少,值小1倍,服务本身的性能将下降 5% 左右。如需自定义该值,建议设置为 maxThread 的 80%。
- maxWaitTime:请求等待执行的最大等待时间,默认值即建议值为 60000 毫秒。相同 maxThreads 和 maxConcurrentRequest 时,该值设置得越小,用于访问服务 URL 进行业务处理的请求越快被拒绝,即有更多线程可以提供其他请求使用。对于低频访问的大规模 GIS 数据发布的服务,建议将其服务 URL 配置到 limitUrls 中,并适当调低 maxWaitTime。
注意事项:1、要使并发请求控制机制起到作用,需要在 web.xml 中定义该 filter 的 filter-mappping:requestLimitFilter 对应的 filter-mapping 节点需要放在 tunnelFilter 之后,SsrfFilter 节点之前。
2、在 web.xml 配置完成后,重启 iServer 方可生效。