坑爹的TOE(Broadcom TCP Offload Engine TCP卸载引擎),导致服务器频繁崩溃的元凶
没想到TOE也能成为TCP崩溃的元凶。
服务器是一台很古老的机器,用作Web服务器。网卡是BCM5708,具有各种卸载功能,包括TCP卸载,但是,这个卸载功能的能力是非常有限的,按照Broadcom的描述,当等待卸载的TCP连接超过网卡卸载能力时(按照说明,大概千兆网卡是1024个,万兆网卡是1600个),就会移交给操作系统,由CPU处理。但是问题就出现在这里了。
这台机器的TCP并发连接数大概平均1500~2500个之间,其中TCPv4连接大概1300~2000个之间,超过了网卡的卸载能力。除了有时候网页打开会卡住外,还出现了严重的自动重启现象,频繁是每天十几次重启,而且不会留下任何日志信息,给问题分析带来很大困难。后来安装了Broadcom网卡工具,关闭了网卡的TOE功能才恢复正常,CPU占用率并没有明显提高。
现在只能推测,要么网卡的TOE部分硬件坏掉,要么Broadcom的硬件设计或者驱动存在问题,导致连接数超过TOE处理能力时服务器出现严重问题。
查阅了很多关于TOE的资料,也说明了TOE不适合高连接数、小文件的Web服务器类应用,所以建议Web服务器还是关闭TOE功能吧。