Python协程安全问题:Context Variables
一、问题:
最近,同事压测遇到奇诡问题,添加好友功能在少量并发压测时没有问题;但是,增加并发压力后,出现增加好友失败。和开发定位问题时,发现是不同用户重复发送同一个authentication。只是,不能确定是开发的bug还是测试代码问题。
正常情况
错误情况
二、定位问题:
- tcpdump + wireshark 抓包
# tcpdump -i eth0 -nn ip src host node1 -w friends.cap
# strings ff1.pcap ff2.pcap|grep 'Bearer' >ff.txt
# grep 'Bearer' ff.txt|wc -l
总共抓取1000条增加好友数据
- python pyjwt 分析数据
import jwt
def from_jwt():
player_ids = set()
subs = set()
with open('ff.txt', 'r') as fp:
lines = fp.readlines()
print(len(lines))
for line in lines:
bearer = line.strip().split()[-1]
try:
data = jwt.decode(bearer, algorithms=['HS256'], options={
"verify_signature": False})
except Exception as e:
print(e)
if data['playerId'] in player_ids:
# 判断是否重复发送同一份 authentication
print(data['playerId'])
player_ids.add(data['playerId'])
subs.add(data['sub'])
return player_ids, subs
if __name__ == '__main__':
ids, subs = from_jwt()
print(len(