这个问题是我之前遇到的,过了很久才想着去解决它,因为这也没多大影响,无非就是再访问一次的问题,后来有一次观察网站的运行情况时,发现这个问题还挺严重,如果一直用,就不会出现问题,如果中间歇一会,再用就会提示数据查询失败,稍后重试,我之前还一直以为是偶尔的数据库问题,这次发现绝对不是数据库的问题,好了,开始着手解决。

  大概找了一下规律,发现只要休息一会再次使用网页查询就会报错,这个报错是后端查询数据库失败报的,那就看后端的代码,反复看了好几遍,发现没有问题,那为什么会报错呢,网上搜了一下,有人说是数据库的timeout设置问题,我就去查看了一下数据库的timeout数据,显示如下:

这个数据很正常啊,怎么会导致几分钟后,连接就失效了呢?这里我后端是用python写的,数据库的连接使用的是SQLALchemy,SQLALchemy的重连机制在默认情况下是2个小时,这个也没有问题,服务器上的代码不便调试,于是我就在自己的虚拟机上调试一下,发现虚拟机上根本不会出现连接失败的问题,两边的代码是一样的,唯一的区别就是数据库不同,虚拟机使用的是本地的数据库,服务器使用的是另一台服务器的数据库,这时我意识到问题了,之前查询的timeout是当前服务器的,而不是使用到的服务器的,查询数据库服务器的timeout发现数据也是正常的:

后来查询global变量发现问题出现在这里,SHOW GLOBAL VARIABLES LIKE '%timeout';

这里的timeout和interactive_timeout都是100s,难怪会出现每过一段时间数据库连接就中断呢,后来询问了同时这个参数设置的原因,好像是数据采集端使用的是labview写的,为了防止占用太多的连接,所以将该值设置的很短,既然数据库的设置不能改,那就改我们的代码,SQLALchemy中有一项配置是来设置重连机制:SQLALCHEMY_POOL_RECYCLE,将该值设置为小于timeout的值即可,于是将SQLALCHEMY_POOL_RECYCLE = 90,重启服务器的应用,问题解决了。

从这个问题看出,其实有时候一些报错就是某个原因引起的,但是因为查询的位置出错,导致花费了很多额外的时间,就像这个,本来应该查数据库服务器的信息,结果查的是应用服务器的信息(其实这两个服务器的数据库内容是一致的,我做的主从同步,一直想把查询和增删改的数据库分开,这里还没有分开,但是自己意识中错误的认为分开了)。

web页面过一段时间再次访问时显示数据库连接错误的更多相关文章

  1. 关于EF第一次加载慢或过一段时间不访问时再次访问加载慢问题的总结

    优化方案 1.安装Application Initialization 这是在iis8出来后才有的,iis8内置的功能,而对于iis7.5也提供了一个扩展以支持这个功能. Application In ...

  2. 【生产环境】Tomcat运行一段时间后访问变慢分析历程

    环境运行一天或者几天,网站访问就很卡,手机端app访问页面出现白屏.Tomcat运行一段时间后访问变慢,但是cpu,内存都正常.日志也是发现不了啥.... 问题的原先分析 1.环境配置(cpu,内存, ...

  3. 所有城市list每次从页面花1段时间抽取后写入到数组,

    所有城市list每次从页面花1段时间抽取后写入到数组,

  4. js实现类似页面广告一段时间自动打开一段时间自动关闭的功能

    js实现类似页面广告一段时间自动打开一段时间自动关闭的功能 一.总结 Window 对象的 open()方法:window.open('测试页面.html','news','height=300,wi ...

  5. 【转载】vue-cli搭建的环境,用nginx做代理服务器,访问时显示:Invalid Host header

    来源:https://blog.csdn.net/Cookysurongbin/article/details/86077241 vue-cli搭建的环境,用nginx做代理服务器,访问时显示:Inv ...

  6. Web页面实现后台数据处理进度与剩余时间的显示

    1.页面后台代码添加如下属性: /// <summary> /// 总数 /// </summary> private double total { set { Session ...

  7. 访问nginx提示gateway timeout 504 ,发现总是当调用时间超过30s时提示504错误

    解决办法: 需要修改php-fpm的配置文件 request_terminate_timeout=30s 参考文档: http://baike.baidu.com/view/641394.htm ht ...

  8. nginx默认访问目录时显示403错误

    author :headsen chen date: 2018-04-25  17:17:25 nginx安装完成后默认的http页面里访问目录的话会报403的错误: 和Apache进行比较,Apac ...

  9. C#数据绑定中,时间为空时显示时间为原始日期问题

    这个问题一般出现在用实体时,实体的时间格式没有加?号.加了之后就默认为空,没有数据时不会为原始时间了.

随机推荐

  1. 使用SpringSecurity Oauth2.0实现自定义鉴权中心

    Oauth2.0是什么不在赘述,本文主要介绍如何使用SpringSecurity Oauth2.0实现自定义的用户校验 1.鉴权中心服务 首先,列举一下我们需要用到的依赖,本文采用的是数据库保存用户信 ...

  2. 浅尝 Elastic Stack (三) Logstash + Beats

    本文使用 Filebeat,如果没有安装需要安装: curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat- ...

  3. url的组成结构信息

    http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name 从上面的URL可以看出,一个完整的 ...

  4. 转:Python2字符编码问题汇总

    这篇文章的部分问题在Python3以后不再存在,老猿只是觉得文章的部分内容还是有参考价值,因此在此原文转发连接: Python2字符编码问题汇总

  5. 第14.2节 HTML知识简介

    一. HTML语言 HTML 指的是超文本标记语言 (Hyper Text Markup Language),它不是一种编程语言,而是一种使用一套标记标签(markup tag)来标记元素作用的标记语 ...

  6. 移动端web网页meta设置

    <meta charset='utf-8'><!-- 声明文档使用的字符编码 --> <meta http-equiv="X-UA-Compatible&quo ...

  7. AcWing 294. 计算重复

    暴力 其实这题的暴力就是个模拟.暴力扫一遍 \(conn(s_1, n_1)\),若出现了 \(res\) 个 \(s_2\). 答案就是 \(\lfloor res / n1 \rfloor\). ...

  8. antDesign获取表单组件的值

    子组件中:  getFormValue是在点击确定按钮获取表单值得事件函数,一旦执行就会执行里边的validate()回调函数 返回的数据中有error和value两种,如果存在error那就是其中某 ...

  9. 女朋友突然问我DNS是个啥....

    女朋友突然问我DNS是个啥.... 今天晚上我正在床上躺着刷手机,然后我女朋友突然说她的电脑坏了.说连着WIFi上不了网,让我给她看一下.(这就是有个程序员男朋友的好处) 然后我拿到电脑看了一下发现访 ...

  10. 安卓和ios的app证书过期的相关问题汇总

    一,ios的APP的发布流程请见:ios的APP的发布流程 http://www.jianshu.com/p/b1b77d804254 这篇文章写得很好很全面 二,app证书过期了怎么办: IOS的情 ...