Tencent / Tendis

Tendis is a high-performance distributed storage system fully compatible with the Redis protocol.
http://tendis.cn
Other
2.87k stars 317 forks source link

2.5.0版本出现socket句柄泄露问题 #257

Open takenliu opened 6 months ago

takenliu commented 6 months ago

Description

现象: 1.进程持有较多的socket句柄没有释放,通过下面的命令统计,结果为几个到几万个不等。 $ lsof -p $pid -K|grep "protocol: TCP"|wc -l 2.即使业务请求量很低的时候,可能消耗cpu单个核的100%。 top命令:%CPU 100.0 同时通过perf命令查看,主要消耗在于NetworkAsio::timeoutProcess()函数。

Expected Behavior

Current Behavior

Possible Solution

Steps to Reproduce (for bugs)

Context

Your Environment

takenliu commented 6 months ago

结论: 2.5.0版本有出现句柄泄露的bug。泄露的前提是,客户端刚创建了连接,还没发送任何请求,就立即close了。这种情况下,服务端有一定的概率会出现NetSession对象的泄露。概率大概0.5%的数量级。 解决办法: 出现问题的相关逻辑,在2.6.0版本已经被删除。可以考虑升级到2.6.0版本解决