web页面过一段时间再次访问时显示数据库连接错误
这个问题是我之前遇到的,过了很久才想着去解决它,因为这也没多大影响,无非就是再访问一次的问题,后来有一次观察网站的运行情况时,发现这个问题还挺严重,如果一直用,就不会出现问题,如果中间歇一会,再用就会提示数据查询失败,稍后重试,我之前还一直以为是偶尔的数据库问题,这次发现绝对不是数据库的问题,好了,开始着手解决。
大概找了一下规律,发现只要休息一会再次使用网页查询就会报错,这个报错是后端查询数据库失败报的,那就看后端的代码,反复看了好几遍,发现没有问题,那为什么会报错呢,网上搜了一下,有人说是数据库的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页面过一段时间再次访问时显示数据库连接错误的更多相关文章
- 关于EF第一次加载慢或过一段时间不访问时再次访问加载慢问题的总结
优化方案 1.安装Application Initialization 这是在iis8出来后才有的,iis8内置的功能,而对于iis7.5也提供了一个扩展以支持这个功能. Application In ...
- 【生产环境】Tomcat运行一段时间后访问变慢分析历程
环境运行一天或者几天,网站访问就很卡,手机端app访问页面出现白屏.Tomcat运行一段时间后访问变慢,但是cpu,内存都正常.日志也是发现不了啥.... 问题的原先分析 1.环境配置(cpu,内存, ...
- 所有城市list每次从页面花1段时间抽取后写入到数组,
所有城市list每次从页面花1段时间抽取后写入到数组,
- js实现类似页面广告一段时间自动打开一段时间自动关闭的功能
js实现类似页面广告一段时间自动打开一段时间自动关闭的功能 一.总结 Window 对象的 open()方法:window.open('测试页面.html','news','height=300,wi ...
- 【转载】vue-cli搭建的环境,用nginx做代理服务器,访问时显示:Invalid Host header
来源:https://blog.csdn.net/Cookysurongbin/article/details/86077241 vue-cli搭建的环境,用nginx做代理服务器,访问时显示:Inv ...
- Web页面实现后台数据处理进度与剩余时间的显示
1.页面后台代码添加如下属性: /// <summary> /// 总数 /// </summary> private double total { set { Session ...
- 访问nginx提示gateway timeout 504 ,发现总是当调用时间超过30s时提示504错误
解决办法: 需要修改php-fpm的配置文件 request_terminate_timeout=30s 参考文档: http://baike.baidu.com/view/641394.htm ht ...
- nginx默认访问目录时显示403错误
author :headsen chen date: 2018-04-25 17:17:25 nginx安装完成后默认的http页面里访问目录的话会报403的错误: 和Apache进行比较,Apac ...
- C#数据绑定中,时间为空时显示时间为原始日期问题
这个问题一般出现在用实体时,实体的时间格式没有加?号.加了之后就默认为空,没有数据时不会为原始时间了.
随机推荐
- 20200513_安装windows sql server 2012 _ ws功能 NetFx3时出错,错误代码:-2146498298
这是没有安装.net Framework 3.5造成的 1. 下载个.net Framework 3.5, 放到任意目录下, 比如C: 2. 打开添加windows 功能 3. 直接下一步: 4. 勾 ...
- 20190626_二次开发BarTender打印机_C#代码_一边读取TID_一边打印_打印机POSTEK
demo代码如下: private void btnPrint_Click(object sender, EventArgs e) { if (this.btnPrint.Text == " ...
- 在Python中使用moviepy进行音视频剪辑混音合成时输出文件无声音问题
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在使用moviepy进行音视频剪辑时发现输出成功但 ...
- Python中自定义类如果重写了__repr__方法为什么会影响到str的输出?
这是因为Python3中,str的输出是调用类的实例方法__str__来输出,如果__str__方法没有重写,则自动继承object类的__str__方法,而object类的__str__方法是调用_ ...
- PyQt学习随笔:Model/View中设置视图数据项可编辑的方法
在视图对象中调用setEditTriggers方法可以设置视图对象中的数据项是否可编辑以及编辑的触发方法. setEditTriggers方法是QAbstractItemView的方法,语法如下: s ...
- shell 编程 && bash 简介(shell 变量、shell操作环境、数据流重导向、管线命令、shell script)
如何学习一门编程语言 数据类型 运算符 关键字 1 认识BASH 这个shell linux是操作系统核心,用户通过shell与核心进行沟通,达到我们想要的目的.硬件.核心.用户之间的关系: 原理:所 ...
- git 常用命令 command 1.0(本地 local repository 对远程仓库 remote repository 的操作)
输入 q 退出 日志界面
- SQL Server常用函数及命令
1.字符串函数 --ascii函数,返回字符串最左侧字符的ascii码值 SELECT ASCII('a') AS asciistr --ascii代码转换函数,返回指定ascii值对应的字符 SEL ...
- WordCounter项目(基于javase)
1. Github项目地址: https://github.com/Flyingwater101/WordCount 1. PSP表格 PSP2.1 Personal Software Proce ...
- 【科技】单 $\log$ 合并两棵有交集 FHQ-Treap 的方法
维护可分裂 & 合并的可重集 考虑这样一个问题: 维护 \(n\) 个 可重集 \(S_1, S_2, \cdots, S_n\),元素值域为 \([1, U]\),初始集合为空.支持一下操作 ...