首页 > 其他分享 >TDengine连接数满了报错:Connection is not available, request timed out after 30000ms.

TDengine连接数满了报错:Connection is not available, request timed out after 30000ms.

时间:2023-08-01 17:57:53浏览次数:45  
标签:available java stream TDengine springframework 报错 messageId org dcir

背景

使用tdengine时遇到一个情况,应用程序使用连接池将接收到的实时数据插入TD时, 会出现获取不到连接的报错.

重现

起一个模拟程序,发送100条数据到应用程序, 应用程序从批量插入改为逐条插入td, 重现出报错:

org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting meta-data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30000ms.
	at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:363)
	at org.springframework.jdbc.support.SQLErrorCodesFactory.resolveErrorCodes(SQLErrorCodesFactory.java:235)
	at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.lambda$setDataSource$0(SQLErrorCodeSQLExceptionTranslator.java:140)
	at org.springframework.util.function.SingletonSupplier.get(SingletonSupplier.java:97)
	at org.springframework.util.function.SupplierUtils.resolve(SupplierUtils.java:40)
	at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.getSqlErrorCodes(SQLErrorCodeSQLExceptionTranslator.java:171)
	at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:193)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)
	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)
	at com.sun.proxy.$Proxy73.insert(Unknown Source)
	at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272)
	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62)
	at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:145)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86)
	at com.sun.proxy.$Proxy77.insertIntoTd(Unknown Source)
	at sun.reflect.GeneratedMethodAccessor72.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
	at com.sun.proxy.$Proxy78.insertIntoTd(Unknown Source)
	at com.dgis.k2h.service.DcirDataService.insertIntoTd(DcirDataService.java:68)
	at com.dgis.k2h.redis.DcirStreamListener.onMessage(DcirStreamListener.java:69)
	at com.dgis.k2h.redis.DcirStreamListener.onMessage(DcirStreamListener.java:14)
	at org.springframework.data.redis.stream.StreamPollTask.deserializeAndEmitRecords(StreamPollTask.java:177)
	at org.springframework.data.redis.stream.StreamPollTask.doLoop(StreamPollTask.java:148)
	at org.springframework.data.redis.stream.StreamPollTask.run(StreamPollTask.java:132)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

验证是数据库连接数的问题

我们将应用程序的连接池数量降低到1个,确保少于数据库的最大连接数, 看看是否还有连接获取出错的报错就行了.
应用程序的连接池配置:

      # 初始化连接大小
      initial-size: 1
      # 最小空闲连接数
      min-idle: 0
      max-active: 1
      max-wait: 60000

再次尝试模拟发送100条数据
正常打印日志, 问题消失. 说明就是应用程序的连接池数量高于服务器最大连接数了

dcir获取到数据。messageId=1690771208242-0, stream=dcir
dcir获取到数据。messageId=1690771208252-0, stream=dcir
dcir获取到数据。messageId=1690771208233-0, stream=dcir
dcir获取到数据。messageId=1690771208253-0, stream=dcir
dcir获取到数据。messageId=1690771208254-0, stream=dcir
dcir获取到数据。messageId=1690771208257-0, stream=dcir
dcir获取到数据。messageId=1690771208258-0, stream=dcir
dcir获取到数据。messageId=1690771208259-0, stream=dcir
dcir获取到数据。messageId=1690771208261-0, stream=dcir
dcir获取到数据。messageId=1690771208261-1, stream=dcir

分析:

考虑以下两种方法解决问题:

  1. 增加td的最大连接数, 比连接池的最大连接数更大, 这样瓶颈就在连接池而不是td这边了.
  2. 考虑使用缓存, 积累到一定数量的数据再处理, Td可以进行批量插入

标签:available,java,stream,TDengine,springframework,报错,messageId,org,dcir
From: https://www.cnblogs.com/qds1401744017/p/17592676.html

相关文章

  • 报错:WARNING: cannot load logging configuration file, logging is disabled
    问题:在webots里使用rospy时报warning。分析:无解决方案:参考https://blog.csdn.net/ckkboy/article/details/985048801.在/etc/下创建ros目录cd/etc/sudomkdirros2.将python_logging.conf文件复制到/etc/ros/下sudocp/opt/ros/melodic/etc/ros/python_log......
  • 升级到python3以后yum报错
    升级完python后(python2升级到python3,并且将原来的/usr/bin下的python软连接给替换成python3的了),执行yum安装或查看命令都会产生这个错误:[root@localhostbin]#yumFile"/usr/bin/yum",line30exceptKeyboardInterrupt,e:^SyntaxErr......
  • CentOS使用yum安装包报错No more mirrors to try解决方法
    报错如下Loadedplugins:fastestmirror,update-motdLoadingmirrorspeedsfromcachedhostfilehttp://mirrors.163.com/centos/7-7.1908.0.el7.centos/os/x86_64/repodata/repomd.xml:[Errno14]HTTPError404-NotFoundTryingothermirror.Toaddressthisissue......
  • 国标GB28181视频平台LntonGBS(源码版)国标平台出现报错“缺失dll文件”的问题解决方案
    LntonGBS是基于国标GB28181协议的视频云服务平台,它可以支持国标协议的设备接入,在视频能力上能实现直播、录像存储、检索与回放、云台控制、告警上报、语音对讲、平台级联等功能,既能作为业务平台使用,也能作为能力层平台调用。技术人员在用户服务器部署LntonGBS平台,提示缺失某个dll文......
  • 关于安装python包执行setup.py文件报错类似提示line 155 warnings.warn(f'Cannot copy
    首先可以确定世python语法问题,一般来说python3.6以后字符串使用f是没有问题的,后来发现问题所在,原来我安装好python以后,没有将python命令软连接到python3,导致python命令其实一直是使用的python2,所以才会有这样的问题。所以,当python3安装好以后,一定要重新指向软连接,还有pip3,也要指向......
  • InfluxDB+TDengine+Telegraf+Grafana 搭建监控平台
    LinuxCentOS环境1.InstallInfluxDB(1)首先访问InfluxDB官网(点击访问),找到选择合适的版本参考文档:https://docs.influxdata.com/influxdb/v2.7/install/?t=Docker下载并运行InfluxDBv2.7dockerrun--nameinfluxdb-p8086:8086influxdb:2.7.0将数据持久化到InfluxD......
  • git 通过husky提交代码报错导致代码丢失(只add了未commit的代码)
    项目中使用了eslint,以及lint-staged,在执行gitcommit时会触发git的pre-commit钩子,对代码做一次检查及格式化。由于个别文件中有TS报错,导致commit失败,并抛出了具体文件路径,当我在命令行点击路径时发现新增得文件没了(.ts、.vue、图片),仔细一看引用过这些文件得代码也没了,比如路......
  • 为企业提供更丰富可视化方案,时序数据库 TDengine 与帆软展开合作
    帆软作为中国专业的大数据BI和分析平台提供商,基于自研商业智能产品已成功服务了包括中信银行、兴业证券、天弘基金等在内的众多金融机构,2022年帆软《统一数据分析平台解决方案》成功斩获金融信创生态实验室优秀奖,这也是国内唯一一个获此殊荣的BI厂商。 随着TDengine在......
  • C# 反序列化报错 XML 文档(1, 2)中有错误:不应有 <xml xmlns=''>
    1.XmlSerializer症状用XmlSerializer进行xml反序列化的时候,程序报错:​不应有<xmlxmlns=''>。​​说明: ​执行当前Web请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 ​异常详细信息: ​System.InvalidOperatio......
  • ES保存数据时报错:Bulk indexing has failures
    ElasticSearch保存时报错问题解决:错误信息org.springframework.data.elasticsearch.ElasticsearchException:Bulkindexinghasfailures.UseElasticsearchException.getFailedDocuments()fordetailedmessages解决:我这边是因为磁盘空间不足了,ES在分片分配时,默认不......