为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8.1.1.193
【操作系统】:linux
【CPU】:
【问题描述】*:时不时的爆出dm.jdbc.driver.DMException: Communication error
日志:
[ERROR - 2024-08-20 13:43:31] tid:110 - [http-nio-8022-exec-34] { conn-10 } prepareStatement(String); [PARAMS]: "select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly,
r.status, r.del_flag, r.create_time, r.remark
from sys_role r
left join sys_user_role ur on ur.role_id = r.role_id
left join sys_user u on u.user_id = ur.user_id
left join sys_dept d on u.dept_id = d.dept_id
WHERE r.del_flag = '0' and u.user_name = ?";
dm.jdbc.driver.DMException: Communication error
at dm.jdbc.driver.DBError.throwException(DBError.java:715)
at dm.jdbc.a.a.a(DBAccess.java:842)
at dm.jdbc.a.a.a(DBAccess.java:206)
at dm.jdbc.driver.DmdbStatement.allocateHandle(DmdbStatement.java:164)
at dm.jdbc.driver.DmdbPreparedStatement.allocateHandle(DmdbPreparedStatement.java:170)
at dm.jdbc.driver.DmdbPreparedStatement.<init>(DmdbPreparedStatement.java:125)
at dm.jdbc.driver.DmdbPreparedStatement.<init>(DmdbPreparedStatement.java:140)
at dm.jdbc.driver.DmdbConnection.do_prepareStatement(DmdbConnection.java:713)
at dm.jdbc.driver.DmdbConnection.do_prepareStatement(DmdbConnection.java:699)
at dm.jdbc.filter.FilterChain.Connection_prepareStatement(FilterChain.java:2085)
at dm.jdbc.filter.log.LogFilter.Connection_prepareStatement(LogFilter.java:3297)
at dm.jdbc.filter.FilterChain.Connection_prepareStatement(FilterChain.java:2081)
at dm.jdbc.driver.DmdbConnection.prepareStatement(DmdbConnection.java:1320)
at com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:535)
at com.alibaba.druid.filter.FilterAdapter.connection_prepareStatement(FilterAdapter.java:908)
at com.alibaba.druid.filter.FilterEventAdapter.connection_prepareStatement(FilterEventAdapter.java:116)
at com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:531)
at com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl.prepareStatement(ConnectionProxyImpl.java:326)
at com.alibaba.druid.pool.DruidPooledConnection.prepareStatement(DruidPooledConnection.java:362)
at sun.reflect.GeneratedMethodAccessor169.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.ibatis.logging.jdbc.ConnectionLogger.invoke(ConnectionLogger.java:55)
at com.sun.proxy.$Proxy149.prepareStatement(Unknown Source)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.instantiateStatement(PreparedStatementHandler.java:86)
at org.apache.ibatis.executor.statement.BaseStatementHandler.prepare(BaseStatementHandler.java:88)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.prepare(RoutingStatementHandler.java:59)
at sun.reflect.GeneratedMethodAccessor168.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49)
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:83)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)
at com.sun.proxy.$Proxy147.prepare(Unknown Source)
at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.prepareStatement(MybatisSimpleExecutor.java:94)
at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doQuery(MybatisSimpleExecutor.java:68)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.query(MybatisCachingExecutor.java:165)
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:65)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)
at com.sun.proxy.$Proxy146.query(Unknown Source)
Caused by: java.net.SocketException: Broken pipe (Write failed)
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111)
at java.net.SocketOutputStream.write(SocketOutputStream.java:155)
at dm.jdbc.a.a.c.a(ByteArrayNode.java:154)
at dm.jdbc.a.a.a.a(Buffer.java:402)
at dm.jdbc.a.a.c(DBAccess.java:899)
at dm.jdbc.a.a.a(DBAccess.java:829)
... 192 more
优先看看数据库日志,有无宕机(后自动重启)的情况,日志一般在$DM_HOME/log/dm_实例名称_2408.log
之前有项目遇到类似的情况,在数据源配置加上这个keep-alive:true 试试
你好你照到解决办法了吗
可以从以下几个方面排查下:
1、驱动版本是否和数据库版本一致
2、数据库max_session限制
3、license限制
4、数据库用户设置了最大空闲时间
5、应用连接池是否有断开自动重连功能