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