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#数据绑定中,时间为空时显示时间为原始日期问题
这个问题一般出现在用实体时,实体的时间格式没有加?号.加了之后就默认为空,没有数据时不会为原始时间了.
随机推荐
- IDEA无法识别src目录
如图 如此 即可 -------------------------------------------------------------------- 另一种办法是:让IDEA识别出module, ...
- PyQt(Python+Qt)学习随笔:containers容器部件GroupBox分组框介绍
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 1.主要属性 GroupBox分组框是一个对多个部件进行编组的框架容器,可以带有标题(title属性 ...
- PyQt程序执行时报错:AttributeError: 'winTest' object has no attribute 'setCentralWidget'的解决方法
用QtDesigner设计了一个UI界面,保存在文件Ui_wintest.ui中,界面中使用了MainWindow窗口,窗口名字也叫MainWindow,用PyUIC将其转换成了 Ui_wintest ...
- LeetCode初级算法之数组:350 两个数组的交集 II
两个数组的交集 II 题目地址:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/ 给定两个数组,编写一个函数来计算它们的交 ...
- AcWing 404. 婚礼
大型补档计划 题目链接 根据题意,显然只有新郎这边可能存在矛盾,考虑这边怎么放即可,新娘那边的放法与这边正好相反且一一对应. 显然对于两个约束条件是一对矛盾,开始我以为可以用并查集,后来发现输出方案的 ...
- Day8 python高级特性-- 迭代 Iteration
通过for循环来遍历 list.tuple.dict.甚至是字符串,这种遍历被称为迭代. 相比于C的for循环, Python的for循环抽象成都更好,不仅可以用在list或tuple上,还可以用在其 ...
- Linux后台命令导入MySQL语句
1.首先输入命令: mysql -u root -p 然后输入MySQL的密码会进入到MySQL的命令界面. 2.输入命令use+数据库名字: use databaseName 3.最后输入命令sou ...
- C++ 中使用 PRId64
同一份代码,Ubuntu 14.04.1 编译没有问题,centos 7 上编译提示错误: error: expected ')' before 'PRId64' 这里两个地址说得很清楚了: http ...
- 多任务-python实现-多线程共享全局变量(2.1.3)
@ 目录 1.全局变量的修改 2.全局变量在多线程中的共享 3.多线程可能遇到的问题 1.全局变量的修改 代码实现 num = 100 nums = [11,22] def test(): globa ...
- SpringBoot执行原理
目录 [Toc] 一.执行原理: 每个Spring Boot项目都有一个主程序启动类,在主程序启动类中有一个启动项目的main()方法, 在该方法中通过执行SpringApplication.run( ...