获取数据库连接时出现问题

2020-09-20 19:49发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

昨晚,我的控制台日志网站上出现以下错误。

为解决该问题,MySQL服务已重新启动,该问题不再出现,但我想了解该问题的出现方式。

 信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 |  [0; 31mERROR [hybrisHTTP95] [81.250.91.222] [JDBCConnectionPool] ----------------------------------  ------
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 |  CEST 2015 Wed Sep 02 18:45:55 CEST:获取数据库连接时出现问题
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 | 引发的异常消息是:等待空闲对象超时
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 |  (启用" db.pool.dumpThreadsOnConnectionError"以查看完整的线程转储)
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 |  ----------------------------------------
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 |  [msept。  2015年2月2日下午6:45:55 org.apache.catalina.core.StandardWrapperValve调用
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 | 严重:路径为[]的Servlet [DispatcherServlet]的Servlet.service()抛出异常[请求处理失败; 嵌套的异常是de.hybris.platform.persistence.hjmp.HJMPException:非法异常类型:java.util.NoSuchElementException],其根本原因是
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 |  java.util.NoSuchElementException:等待空闲对象的超时
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 | 在org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1174)
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 | 在de.hybris.platform.jdbcwrapper.JDBCConnectionPool.borrowConnection(JDBCConnectionPool.java:83)
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 | 在de.hybris.platform.jdbcwrapper.ConnectionErrorCheckingJDBCConnectionPool.borrowConnection(ConnectionErrorCheckingJDBCConnectionPool.java:87)
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 | 在de.hybris.platform.jdbcwrapper.DataSourceImpl.getFromPool(DataSourceImpl.java:422)
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 | 在de.hybris.platform.jdbcwrapper.DataSourceImpl.doGetConnection(DataSourceImpl.java:397)
  ...

  

另一个例子,

 信息|  jvm 8 | 主|  2015/09/02 18:45:56.096 |  [0; 31mERROR [hybrisHTTP87] [注册表]无法激活租户<< master >>,因为当前其数据库连接已丢失
  信息|  jvm 8 | 主|  2015/09/02 18:45:56.096 |  [msept。  2015年2月2日下午6:45:56 org.apache.catalina.core.StandardWrapperValve调用
  信息|  jvm 8 | 主|  2015/09/02 18:45:56.096 |  GRAVE:" Servlet.service()"注入servlet DispatcherServlet发生异常的情况
  信息|  jvm 8 | 主|  2015/09/02 18:45:56.096 |  java.lang.IllegalStateException:无法将租户切换到<< master >>
  信息|  jvm 8 | 主|  2015/09/02 18:45:56.096 | 在de.hybris.platform.core.Registry.activateTenant(Registry.java:634)
  信息|  jvm 8 | 主|  2015/09/02 18:45:56.096 | 在de.hybris.platform.core.Registry.setCurrentTenant(Registry.java:476)
  信息|  jvm 8 | 主|  2015/09/02 18:45:56.096 | 在de.hybris.platform.core.Registry.setCurrentTenantByID(Registry.java:608)
  信息|  jvm 8 | 主|  2015/09/02 18:45:56.096 | 在de.hybris.platform.servicelayer.web.AbstractPlatformFilterChain.activateTenantFromContext(AbstractPlatformFilterChain.java:178)
  信息|  jvm 8 | 主|  2015/09/02 18:45:56.096 | 在de.hybris.platform.servicelayer.web.AbstractPlatformFilterChain.doFilterInternal(AbstractPlatformFilterChain.java:148)
  ...

  

数据库连接正在工作。

数据库实例已启动,正在运行且可访问。

我在MySQL的error.log中没有发现任何错误。

未达到最大连接数。

从网站服务器到数据库的连接正常(通过telnet)。

我在系统方面没有明显的问题。


下面,您将在重新启动之前找到mysqltunner的统计信息:

  root @ GAPIX1:〜#mysqltuner
 
  >> MySQLTuner 1.0.1-Major Hayden 
  >>错误报告,功能请求和可从http://mysqltuner.com/下载
  >>使用'--help'运行以获取其他选项和输出过滤
 
  --------一般统计----------------------------------------  ----------
  [-]跳过版本检查MySQLTuner脚本
  [确定]当前正在运行受支持的MySQL版本5.5.38-0ubuntu0.12.04.1-log
  [确定]在64位架构上运行
 
  --------存储引擎统计信息---------------------------------------  ----
  [-]状态:-存档-BDB-联合+ InnoDB -ISAM -NDBCluster
  [-] InnoDB表中的数据:8G(表:432)
  [-] PERFORMANCE_SCHEMA表中的数据:0B(表:17)
  [!!]碎片表总数:54
 
   -  -  -  -  性能指标  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  ---------
  [-]拍摄时间:70d 0h 58m 27s(2B q [340.837 qps],3M conn,TX:2080B,RX:465B)
  [-]读/写:89%/11%
  [-]缓冲区总数:每线程34.4G全局+ 10.2M(最多1000个线程)
  [确定]可能的最大内存使用量:44.4G(已安装RAM的71%)
  [确定]慢查询:0%(59K/2B)
  [!!]最高连接使用率:87%(879/1000)
  [确定]密钥缓冲区大小/MyISAM索引总数:1.0G/94.0K
  [确定]关键缓冲区命中率:100.0%(4B缓存/7次读取)
  [!!]查询缓存已禁用
  [确定]需要临时表的排序:0%(47K临时排序/215M排序)
  [!!]执行时没有索引:118495
  [确定]在磁盘上创建的临时表:0%(磁盘上14K/总计86M)
  [确定]线程缓存命中率:99%(创建4K/3M连接)
  [确定]表缓存命中率:24%(4K打开/16K打开)
  [确定]使用的打开文件限制:0%(20/9K)
  [确定]立即获得表锁:100%(立即1B锁/1B锁)
  [确定] InnoDB数据大小/缓冲池:8.1G/32.0G
 
  --------建议-----------------------------------------  ------------
  一般建议:
      运行OPTIMIZE TABLE来对表进行碎片整理以获得更好的性能
      减少或消除持久连接以减少连接使用量
      调整联接查询以始终利用索引
  要调整的变量:
      max_connections(> 1000)
      wait_timeout(<600)
      Interactive_timeout(<600)
      query_cache_size(> = 8M)
      join_buffer_size(> 1.0M,或始终对联接使用索引)

  

我强烈认为这是一个锁,但是目前没有任何动作可以完全阻止数据库。

我希望您对此主题有意见,也希望在https://wiki.hybris.com/display/release5/Include+-+projectproperties+-+MySQL+parameters

我将启用选项" db.pool.dumpThreadsOnConnectionError"以查看下一次完整的线程转储,但我希望它不再发生。

我希望有人能帮助我。

亲切的问候,

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

昨晚,我的控制台日志网站上出现以下错误。

为解决该问题,MySQL服务已重新启动,该问题不再出现,但我想了解该问题的出现方式。

 信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 |  [0; 31mERROR [hybrisHTTP95] [81.250.91.222] [JDBCConnectionPool] ----------------------------------  ------
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 |  CEST 2015 Wed Sep 02 18:45:55 CEST:获取数据库连接时出现问题
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 | 引发的异常消息是:等待空闲对象超时
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 |  (启用" db.pool.dumpThreadsOnConnectionError"以查看完整的线程转储)
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 |  ----------------------------------------
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 |  [msept。  2015年2月2日下午6:45:55 org.apache.catalina.core.StandardWrapperValve调用
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 | 严重:路径为[]的Servlet [DispatcherServlet]的Servlet.service()抛出异常[请求处理失败; 嵌套的异常是de.hybris.platform.persistence.hjmp.HJMPException:非法异常类型:java.util.NoSuchElementException],其根本原因是
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 |  java.util.NoSuchElementException:等待空闲对象的超时
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 | 在org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1174)
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 | 在de.hybris.platform.jdbcwrapper.JDBCConnectionPool.borrowConnection(JDBCConnectionPool.java:83)
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 | 在de.hybris.platform.jdbcwrapper.ConnectionErrorCheckingJDBCConnectionPool.borrowConnection(ConnectionErrorCheckingJDBCConnectionPool.java:87)
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 | 在de.hybris.platform.jdbcwrapper.DataSourceImpl.getFromPool(DataSourceImpl.java:422)
  信息|  jvm 8 | 主|  2015/09/02 18:45:55.994 | 在de.hybris.platform.jdbcwrapper.DataSourceImpl.doGetConnection(DataSourceImpl.java:397)
  ...

  

另一个例子,

 信息|  jvm 8 | 主|  2015/09/02 18:45:56.096 |  [0; 31mERROR [hybrisHTTP87] [注册表]无法激活租户<< master >>,因为当前其数据库连接已丢失
  信息|  jvm 8 | 主|  2015/09/02 18:45:56.096 |  [msept。  2015年2月2日下午6:45:56 org.apache.catalina.core.StandardWrapperValve调用
  信息|  jvm 8 | 主|  2015/09/02 18:45:56.096 |  GRAVE:" Servlet.service()"注入servlet DispatcherServlet发生异常的情况
  信息|  jvm 8 | 主|  2015/09/02 18:45:56.096 |  java.lang.IllegalStateException:无法将租户切换到<< master >>
  信息|  jvm 8 | 主|  2015/09/02 18:45:56.096 | 在de.hybris.platform.core.Registry.activateTenant(Registry.java:634)
  信息|  jvm 8 | 主|  2015/09/02 18:45:56.096 | 在de.hybris.platform.core.Registry.setCurrentTenant(Registry.java:476)
  信息|  jvm 8 | 主|  2015/09/02 18:45:56.096 | 在de.hybris.platform.core.Registry.setCurrentTenantByID(Registry.java:608)
  信息|  jvm 8 | 主|  2015/09/02 18:45:56.096 | 在de.hybris.platform.servicelayer.web.AbstractPlatformFilterChain.activateTenantFromContext(AbstractPlatformFilterChain.java:178)
  信息|  jvm 8 | 主|  2015/09/02 18:45:56.096 | 在de.hybris.platform.servicelayer.web.AbstractPlatformFilterChain.doFilterInternal(AbstractPlatformFilterChain.java:148)
  ...

  

数据库连接正在工作。

数据库实例已启动,正在运行且可访问。

我在MySQL的error.log中没有发现任何错误。

未达到最大连接数。

从网站服务器到数据库的连接正常(通过telnet)。

我在系统方面没有明显的问题。


下面,您将在重新启动之前找到mysqltunner的统计信息:

  root @ GAPIX1:〜#mysqltuner
 
  >> MySQLTuner 1.0.1-Major Hayden 
  >>错误报告,功能请求和可从http://mysqltuner.com/下载
  >>使用'--help'运行以获取其他选项和输出过滤
 
  --------一般统计----------------------------------------  ----------
  [-]跳过版本检查MySQLTuner脚本
  [确定]当前正在运行受支持的MySQL版本5.5.38-0ubuntu0.12.04.1-log
  [确定]在64位架构上运行
 
  --------存储引擎统计信息---------------------------------------  ----
  [-]状态:-存档-BDB-联合+ InnoDB -ISAM -NDBCluster
  [-] InnoDB表中的数据:8G(表:432)
  [-] PERFORMANCE_SCHEMA表中的数据:0B(表:17)
  [!!]碎片表总数:54
 
   -  -  -  -  性能指标  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  ---------
  [-]拍摄时间:70d 0h 58m 27s(2B q [340.837 qps],3M conn,TX:2080B,RX:465B)
  [-]读/写:89%/11%
  [-]缓冲区总数:每线程34.4G全局+ 10.2M(最多1000个线程)
  [确定]可能的最大内存使用量:44.4G(已安装RAM的71%)
  [确定]慢查询:0%(59K/2B)
  [!!]最高连接使用率:87%(879/1000)
  [确定]密钥缓冲区大小/MyISAM索引总数:1.0G/94.0K
  [确定]关键缓冲区命中率:100.0%(4B缓存/7次读取)
  [!!]查询缓存已禁用
  [确定]需要临时表的排序:0%(47K临时排序/215M排序)
  [!!]执行时没有索引:118495
  [确定]在磁盘上创建的临时表:0%(磁盘上14K/总计86M)
  [确定]线程缓存命中率:99%(创建4K/3M连接)
  [确定]表缓存命中率:24%(4K打开/16K打开)
  [确定]使用的打开文件限制:0%(20/9K)
  [确定]立即获得表锁:100%(立即1B锁/1B锁)
  [确定] InnoDB数据大小/缓冲池:8.1G/32.0G
 
  --------建议-----------------------------------------  ------------
  一般建议:
      运行OPTIMIZE TABLE来对表进行碎片整理以获得更好的性能
      减少或消除持久连接以减少连接使用量
      调整联接查询以始终利用索引
  要调整的变量:
      max_connections(> 1000)
      wait_timeout(<600)
      Interactive_timeout(<600)
      query_cache_size(> = 8M)
      join_buffer_size(> 1.0M,或始终对联接使用索引)

  

我强烈认为这是一个锁,但是目前没有任何动作可以完全阻止数据库。

我希望您对此主题有意见,也希望在https://wiki.hybris.com/display/release5/Include+-+projectproperties+-+MySQL+parameters

我将启用选项" db.pool.dumpThreadsOnConnectionError"以查看下一次完整的线程转储,但我希望它不再发生。

我希望有人能帮助我。

亲切的问候,

付费偷看设置
发送
5条回答
木偶小白
1楼-- · 2020-09-20 20:00

hybris应用程序与数据库服务器之间的网络问题可能会导致此问题,或者防火墙可能会断开空闲连接。 确保,如果数据库和应用程序服务器之间有防火墙,请确保防火墙不会断开空闲连接

落灬小鱼
2楼-- · 2020-09-20 19:59

坏轨。 没有网络/防火墙问题。 问题没有再出现。

如果我有新闻,我会及时通知您。

Aaron 3364
3楼-- · 2020-09-20 20:07

嗨Matthieu,

我也遇到了同样的问题,您是否能够找到解决此问题的方法,并且如果您可以共享信息也将有所帮助。

Teja致谢
ZJXianG
4楼-- · 2020-09-20 19:56

下次发生错误时,您应该获取线程转储-如果存在资源短缺的情况(缺少任何可用的连接),则转储中应包含大量正在积极使用连接的线程。 您的代码中是否有自定义事务处理?

天桥码农
5楼-- · 2020-09-20 20:11

一周热门 更多>