GeoServer Image Mosaics查询PostGIS索引表超出最大连接数问题咨询
问题分析与解决方案
现象判定
该现象不属于正常行为,本质是ImageMosaic默认JDBC连接池未开启空闲连接回收导致的连接泄漏问题,并非你的配置错误或理解偏差。
超量连接产生原因
datastore.properties默认maxConnections=10的限制是单ImageMosaic连接池的理论上限,默认参数下未启用空闲连接回收机制,长期运行下会出现连接计数超配、空闲连接长期不释放的问题- 你观察到的数小时空闲的连接,是因为默认配置下
timeBetweenEvictionRunsMillis参数值为-1,即关闭了空闲连接回收线程,空闲连接就算长期无请求也不会被主动释放,并发请求累积后就会突破单mosaic的10连接限制,最终打满PostgreSQL的100连接上限
修复方案
方案1:修改datastore.properties配置(优先级更高,改造成本最低)
每个ImageMosaic对应的datastore.properties文件都追加以下连接池参数即可:
# 最大连接数可根据实际业务并发调整,两个mosaic总连接数建议不超过PostgreSQL max_connections的70% maxConnections=10 # 每30秒运行一次空闲连接回收任务 timeBetweenEvictionRunsMillis=30000 # 连接空闲超过5分钟即被回收 minEvictableIdleTimeMillis=300000 # 每次回收任务检测全部空闲连接 numTestsPerEvictionRun=10 # 获取连接时校验有效性,避免拿到失效连接 testOnBorrow=true # 连接校验SQL validationQuery=SELECT 1
方案2:改用JNDI全局连接池
该方案可以彻底解决多ImageMosaic各自维护连接池导致的连接数叠加超量问题:所有ImageMosaic共用同一个全局连接池,可统一管控总连接数上限,也能统一配置空闲回收、连接校验等策略,适合多mosaic、多PostGIS数据源的场景,完全可以解决你当前的问题。
内容的提问来源于stack exchange,提问作者J.B.
相关产品推荐
相关产品推荐

