相关文章推荐
坐怀不乱的猕猴桃  ·  What is linux ...·  10 月前    · 
大鼻子的水龙头  ·  ifconfig eth0 down ...·  1 年前    · 
独立的椰子  ·  python + django: ...·  1 年前    · 
仗义的自行车  ·  Apache Camel ...·  1 年前    · 
win7下的flask开发环境(Python3.7 + Flask 1.1.1 + MariaDb 10.5.3)

自测一个查询数据库的接口,单次请求发送时,正常。

使用apache bench构建请求,设置为100并发,共10000次请求时,汇总结果出现大量的失败提示。 查看服务端日志,抛出大量异常信息,Packet sequence number wrong - got 1 expected 0

此时继续单次请求发送,仍然返回500,重启flask服务后恢复正常。 期间,查了下相关资料,有的说是session未加线程锁。加上后,故障依旧。

再次压测接口,情况照旧。此时尝试使用navicat连接到数据库,出现报错,提示连接数被占满了。 再次重启flask服务后,navicat可以正常访问。mysql命令行输入SHOW PROCESSLIST; 命令,查询当前连接数,仅有2个。当启动压测时,瞬间飙升至152个。

根据这个,定位到相关数据库获取session的语句,发现获取sqlalchemy连接池session的方法并不是单例,而是重新实例化了一个新的对象。 更改为连接池单例后,再次压测,可正常通过。