首页
学习
活动
专区
圈层
工具
发布

uwsgi 多进程导致数据库连接丢失的踩坑记录

起因 项目使用的 Flask+SQLAlchemy+uwsgi ,突然有一天编写了一个有对数据库高并发的接口。然后其他本来正常的接口就偶尔会出现404错误,且必须重启服务才能解决。...试验① 以为是MySQL连接池和超时时间导致的,反复查看发现并没有什么问题。然后怀疑到是不是python对MySQL的连接驱动导致的。 项目里使用的pymysql被公认为是比较慢的连接驱动。...结果只是使触发这种bug的频率稍微降低了一点 试验② 后来就怀疑到是不是uwsgi起多进程的时候触发了什么奇怪的bug,结果一搜就在Stack Overflow上发现了宝藏。...简单翻译一下,就是uwsgi启动多进程时,会启动一个主进程初始化所有的app(其中包括数据库连接),然后将所有app复制到其他进程中。这!就!导!致!了!...所有进程全部共用一个MySQL的连接 如果在uwsgi.ini中添加参数lazy-apps=true,即可让各个进程都创建自己的app。即所有进程都有属于自己的MySQL连接了。

2.9K41

【详解】MySQL重连,连接丢失:Thelastpacketsuccessfullyreceivedfromtheserve

连接丢失的原因1.1 超时设置不当MySQL服务器默认有一个​​wait_timeout​​参数,用于设置非交互式连接的最大空闲时间。...这篇文章涵盖了MySQL连接丢失的主要原因、诊断方法以及相应的解决方案,旨在帮助读者有效地应对这一常见的数据库问题。...日志记录:在生产环境中,建议使用日志记录来代替 ​​print​​ 语句,以便更好地管理和监控连接状态。异常处理:根据具体需求,可以进一步细化异常处理逻辑,例如在多次重连失败后退出程序或发送警报。...通过这种方式,可以有效地处理 MySQL 连接丢失的问题,并确保应用程序的稳定运行。在处理MySQL连接时,经常会遇到连接丢失的问题,特别是在长时间没有活动或网络不稳定的情况下。...:在代码中捕获连接丢失的异常,并尝试重新建立连接。

2.6K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    OpenGL(四)-- 图元连接方式(记录)OpenGL(四)-- 图元连接方式(记录)

    OpenGL/OpenGL ES图元连接方式 图元 描述 GL_POINTS 每个顶点在屏幕上都是单独点 GL_LINES 每⼀一对顶点定义⼀一个线段 GL_LINE_STRIP ⼀一个从第⼀一个顶点依次经过每...⼀一个后续顶点而绘制的线条 GL_LINE_LOOP 和GL_LINE_STRIP相同,但是最后⼀一个顶点和第⼀一个顶点连接起来了了....GL_POLYGON 每4个顶点定义⼀一个新的四边形 GL_QUADS 每4个顶点连接并内部填充 GL_QUAD_STRIP 形成四边形后2个顶点复用 GL_TRIANGLES 每3个顶点定义⼀一个新的三...⻆角形 GL_TRIANGLE_STRIP 共⽤用⼀一个条带(strip)上的顶点的⼀一组三⻆角形,复用后两个顶点 GL_TRIANGLE_FAN 以⼀一个圆点为中⼼心呈扇形排列列,共⽤用相邻顶点的⼀一组三

    1.1K20

    SparkStreaming 写数据到 HBase,由于共用连接造成的数据丢失问题

    有如下程序,SparkStreaming 读取 Kafka 中的数据,经过处理后,把数据写入到 Hbase 中 /** * Author: Jed * Description: SparkStreaming...org.apache.hadoop.hbase.client.HTable.put(HTable.java:1029) 重点是:hconnection-0x6432ad81 closed 问题出在获得连接的工具类中...,在 DStream 中的每个 partition 中获得中一个 HBase 的连接,为了提高"效率",让每个 partition 共用了一个 connection,但就是这样,才导致了问题的出现,假设...HBase 中写数据,当 A partition 写完10000条数据后,关闭了 connection,假设此时 B partition 也已经写入了10000条数据,但它还有 10000 条数据要写,连接却关闭了...,程序会报以上的错误,数据会丢失 10000 条 解决办法就是让每个 partition 获得独立的 connection,只需要把 HBaseUtil 类修改如下即可: object HBaseUtil

    2.7K20

    故障分析 | pt-archiver 归档丢失一条记录

    作者:王向爱可生 DBA 团队成员,负责公司 DMP 产品的运维和客户 MySQL 问题的处理。擅长数据库故障处理。对数据库技术和 python 有着浓厚的兴趣。...WHERE子句以防止工具删除单列升序字段具有的具有AUTO_INCREMENT属性最大值的数据行,为了在数据库重启之后还能使用到AUTO_INCREMENT对应的值,防止引起无法归档或清除字段对应最大值的行...)字段的最大值如“max(id)”,的数据行进行保护。...势必会导致下一次的归档失败,影响归档的持续进行。间接影响业务综上所述,pt-archiver工具默认开启safe-auto-increment参数是很有必要的。可以防止某些意外发生。...MySQL 正常关闭后重启:从系统表中获取计数器的值。MySQL 故障后重启:从系统表中获取计数器的值;从最后一个检查点开始扫描 redo log 中记录的计数器值;取这两者的最大值作为新值。

    1.7K40

    【详解】MySQL远程连接丢失问题解决方法(LostconnectiontoMySQLserver)

    检查网络连接网络问题是导致连接丢失的常见原因之一。您可以尝试以下步骤来检查和优化网络连接:ping测试:使用​​ping​​命令测试从客户端到MySQL服务器的网络延迟。...优化查询长时间运行的查询可能会导致连接超时。优化查询可以减少执行时间,从而避免连接丢失。以下是一些优化建议:索引优化:确保查询中使用的列上有适当的索引。...错误日志:记录MySQL服务器的错误信息,路径通常是​​/var/log/mysql/error.log​​。...慢查询日志:记录执行时间超过指定阈值的查询,路径通常是​​/var/log/mysql/slow-query.log​​。...日志分析查看MySQL的错误日志,了解连接丢失的具体原因。错误日志通常位于MySQL安装目录下的​​data​​文件夹中,文件名为​​hostname.err​​。

    1.7K11

    记录 | 解决连接zookeeper报错No route to host

    最近在学习微服务,遇到了很多问题,今天又遇到了个连接zookeeper报错的问题,在此记录下。 如下为:学生课程管理系统简单微服务架构图: ?...course-edge-service单服务看是否同样报错: docker run -ti course-edge-service:latest --zookeeper.address=192.168.1.103 启动后报同样的错...看报错日志应该就是连不上zookeeper,在宿主机上curl zookeeper地址,是通的: [root@localhost course-edge-service]# curl 192.168.1.103...在course-edge-service的容器内curl zookeeper地址: [root@localhost course-edge-service]# docker exec -ti 5c993840aeae...Es /usr/sbin/firewalld --nofork --nopid 关闭防火墙: $ systemctl stop firewalld.service course-edge-service的容器内再

    3.2K60

    按行处理 JSONL:让坏记录可定位而不悄悄丢失

    把文件行号当作排查线索处理逐行保存的 JSON 记录时,最麻烦的往往不是发现解析错误,而是错误发生后找不到对应的原始数据。...直接把空行过滤掉,再给剩余记录重新编号,会让日志里的行号与编辑器显示的行号不一致;捕获异常后只写一句“读取失败”,也无法判断是格式、类型还是字段内容出了问题。...一种适合小文件的做法,是先做完整检查,再决定是否启动业务导入。每条结果都记录原始物理行号,失败记录分类保存,原始输入保持不变。下面的示例约定一行对应一个对象,并要求 record_id 是非空字符串。...语法错误保存解析器给出的列号,但不把整行内容写入日志,以免业务字段中夹带个人信息或访问凭据。对格式合法但结构不符合约定的记录,则使用独立的错误类别。...这个对账只能证明每一行都走过了检查分支,不能证明业务记录没有重复;重复编号检查需要额外的规则和索引。小文件示例与生产任务的边界该实现把正常记录和错误列表都放在内存中,适合有限规模的本地检查。

    16910

    huawei Cloud redis 连接超时问题排查记录

    在一个风和日丽的上午,日志告警群里的机器人开始告警,显示redis 连接超时;第一反应是不是redis 扛不住了。...发现新建连接数为562788(五十万),感觉这个监控指标有点异常,因为我们redis当前redis 实力的最大TCP连接数是(10000-50000)然后我们reids 实力配置的 maxClient...新建连接数 这个监控数据到底是怎么取的;得到的答案是: 新建连接数:这是60s 以内的值,真正当前这个时间点新建连接数应该是562788/60=9,379.8 所以应该是连接数超过最大值导致的连接redis...于是开始找证据,想法就是在同一时间在所有连接redis 的机器获取当前的TCP连接,然后看看看是从那个服务发起的连接redis; 在所有的机器上获取当前的TCP 连接状态,然后复制到指定的机器上进行分析...发现确实redis 连接池没生效,导致的这个问题。到此问题得以解决;

    1K30

    Redis 连接数爆炸:连接池配置错误踩坑记录

    Redis 连接数爆炸:连接池配置错误踩坑记录 Hello,我是摘星! 在彩虹般绚烂的技术栈中,我是那个永不停歇的色彩收集者。 每一个优化都是我培育的花朵,每一个特性都是我放飞的蝴蝶。...这个看似简单的问题,却让我们的服务在高峰期频繁出现连接超时,用户体验急剧下降。...事情的起因是这样的:我们的电商平台在双十一期间流量激增,Redis连接数从平时的几百个突然飙升到上万个,最终触发了Redis的最大连接数限制。...更糟糕的是,连接池配置的不当导致连接无法及时释放,形成了恶性循环。经过三天三夜的排查和优化,我终于找到了问题的根源,并总结出了一套完整的Redis连接池配置最佳实践。...Redis连接数从正常的300-500个连接,短时间内飙升到了8000+个连接,接近Redis服务器的最大连接数限制(10000)。

    1.5K10

    当 MySQL 连接池遇上事务(二):消失的记录

    并且,之后再往表X插入记录,自增长的任务ID居然跳过了N,直接是N+1。 接口的日志和N+1的任务ID,都证明了任务ID为N的记录曾经存在过,但是从数据库中却找不到这条记录的任何踪迹。...被调用的平台接口很自然的拿到了开启事务的连接,并往任务表X成功插入了一条记录(任务ID为N)。...而在平台接口sleep之后,因为该连接超过了keepalive时间已经被释放,事务没有被提交,再次获取连接查询时,就查不到刚才插入的记录了,从而造成“消失的记录”。...这次不会出现消失的记录,异步任务记录插入成功,但是由于该连接已开启了事务,会导致任务表被加上行锁和间隙锁,从而导致任务处理svr等锁而无法处理任务,任务最终还是会超时失败。 4....那些年,我们那一如既往的幸运 “消失的记录”问题总算搞清楚了,现在再回顾一下,在《神秘的幽灵锁》一文,我说过我们使用“连接池+事务”的方式一直是错误的,但是却很幸运地没发生过问题,其根本原因就在于我们使用了阻塞的

    4.7K73

    MySQL远程连接丢失问题解决方法(Lost connection to MySQL server)

    远程连接mysql是总是提示: Lost connection to MySQL server at ‘reading initial communication packet', system error...: 0 很明显这是连接初始化阶段就丢失了连接的错误。...今天偶然在网上看到一个遇到同样问题的人贴出的配置,发现他多了一句配置 skip-name-resolve,抱着试试看的态度改了一下并重启了mysql服务,果然远程一下子就连接上了,真是无语。...其实问题很简单,都是MySQL的配置文件默认没有为远程连接配置好,只需要更改下MySQL的配置文件即可。 具体的解决步骤如下,希望能帮助遇到同样问题的同学们: 找到并修改my.cnf文件。...远程连接不会丢失了。 cambrian.render('tail')

    37K40
    领券