使用 siege 对项目接口进行并发测试时,后台日志出现下面几种异常:
- _io.BufferedReader
- Packet sequence number wrong
- NoneType' object has no attribute 'settimeout'
- Too many connections
运行环境:
ubuntu 16.04
python 3.6
Django 2.14
MySQL 5.6
部署 Gunicorn
数据库包 Pymysql
问题分析:
- Django 数据库访问默认是长连接,并发情况下连接数耗尽
- 使用 pymysql 库,性能较差,使用gevent 时 会出现游标访问异常等问题
解决方案:
- 使用连接池管理
- 使用MySQLdb库
1.使用PooledDB库是实现连接池
2.重写数据库引擎
3.settings.py中设置 ENGINE, CONN_MAX_AGE需要设置为None
ps: 需要删除 这句环境兼容代码(如果有的话,否则无法使用MySQLdb)
import pymysql
pymysql.install_as_MySQLdb()
4. 设置数据库的最大连接数 max_connections = 1000
如果安装 MySQLdb失败,请查看https://www.jianshu.com/p/f389d50a5678