使用 siege 對項目接口進(jìn)行并發(fā)測試時,后臺日志出現(xiàn)下面幾種異常:
- _io.BufferedReader
- Packet sequence number wrong
- NoneType' object has no attribute 'settimeout'
- Too many connections
運行環(huán)境:
ubuntu 16.04
python 3.6
Django 2.14
MySQL 5.6
部署 Gunicorn
數(shù)據(jù)庫包 Pymysql
問題分析:
- Django 數(shù)據(jù)庫訪問默認(rèn)是長連接,并發(fā)情況下連接數(shù)耗盡
- 使用 pymysql 庫,性能較差,使用gevent 時 會出現(xiàn)游標(biāo)訪問異常等問題
解決方案:
- 使用連接池管理
- 使用MySQLdb庫
1.使用PooledDB庫是實現(xiàn)連接池

image.png
2.重寫數(shù)據(jù)庫引擎

image.png
3.settings.py中設(shè)置 ENGINE, CONN_MAX_AGE需要設(shè)置為None
ps: 需要刪除 這句環(huán)境兼容代碼(如果有的話,否則無法使用MySQLdb)
import pymysql
pymysql.install_as_MySQLdb()

image.png
4. 設(shè)置數(shù)據(jù)庫的最大連接數(shù) max_connections = 1000
如果安裝 MySQLdb失敗,請查看http://www.itdecent.cn/p/f389d50a5678