tcp10种状态(TCP服务器上保持了大量的CLOSE)

昨天写了一篇文章介绍了CLOSE_WAIT ,有个粉丝说我没有讲到到问题的关键,因为在实际项目中,我们关心的是如果服务器保持了大量的CLOSE_WAIT应该怎么解决。说的也是,因为在具体的项目开发过程中,面对PM ,面对项目Schedule ,快速的重现问题、定位问题、解决问题才是王道。

tcp10种状态(TCP服务器上保持了大量的CLOSE)(1)

自己从自己刨的坑里跳出来

这里我分享自己在之前搭建的一个server 保持了大量的的CLOSE_WAIT的解决方法。

  • 问题描述

开始的时候是发现自己搭建的server 运行一段时间以后就ping 不通了,客户端也连接不上了,最后发现是server端有大量的CLOSE_WAIT状态的tcp pcb ,至于怎么发现的你就不要问了,我说过了我不是TCP/IP高手,发现问题是一个痛苦的过程

  • 原因分析

我的系统运行的是FreeRTOS操作系统的 ,TCP协议作为FreeRTOS一个Task运行,TCP/IP协议栈的优先级并不高,这个其实也不是最主要的,最最要的是其他Task中,有个Task会频繁的周期性的访问临界资源,说到这里估计高手们应该都看出门道了,是的,临界资源保护会屏蔽软件中断,协议栈线程受系统调度的影响,以至于server的应用程序不能实时响应网络上连接处理。

  • 解决方法

  1. 修改TCP/IP任务优先级,从而确保网络任务的实时响应

  2. 扩大临界资源访问周期,确切的说是减少临界资源的访问,从而能够让TCP/IP任务获得更多的CPU运行权限。

tcp10种状态(TCP服务器上保持了大量的CLOSE)(2)

这样修改以后,问题就没了。对程序员来说,解掉一个棘手的bug ,有一种奥特曼打怪兽的感觉。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页