go tcp服务内存泄露排查
2021-08-30 本文已影响0人
七剑演武堂
目前在一家安全公司任职架构师,刚上任就赶上了压测,并且暴露了服务器出现内存泄露问题,表现为tcp连接增加时,内存稳步增长;tcp链接断开,服务器内存不释放。
程序是由go语言编写的,go是由gc的,说明内存溢出的原因一定是因为某个分配在堆上的全局变量导致的。
根据原因,推测该变量与维护tcp连接有关,经查找确认了和client有关的三个map。
对此,针对于该三个map添加和移除进行对应的日志打印,发现了代码中两处异常处理未闭环,导致对应的map没有正确释放元素。