程咬金有三板斧,我们有三招。在这篇博文中我们要出第三招,同时也意味着昨天在“希望的田野”上的第二招失败了。

前两招打头(CPU)不凑效,这一招要换一个部位,但依然要坚持攻击敌人最弱(最忙最累)部位的原则。那除了CPU,最忙最累的部位是哪里呢?对于Web服务器来说,毫无悬念,当然是网卡。而且阿里云的云服务器,所有的网络负载都集中在一块内网网卡上,SLB(负载均衡)用它,OCS(缓存服务)用它,RDS(数据库服务)也用它。所以,就对它出招!

招式受这篇博文(XenServer – Windows 2003 TCP checksum issue)的启发,博主通过禁用TCP/IP Offload解决了“通过IIS下载文件中途突然卡住”的问题。TCP/IP Offload的初衷就是让网卡帮CPU分担一些TCP/IP协议栈的处理工作,比如检查checksum、发ack包,在物理机环境下,它是提高网络处理性能的功臣。但是在虚拟机环境下,网卡是虚拟出来的,它的作用就有待商榷与验证。于是,禁用它成为第三招的招式。

有了目标部位与招式,还等什么,出招!

开始的时候,我们偷了点懒,只出了两个手指,想点穴取胜——只禁用了网卡的Checksum Offload与Check checksum on RX packets。

结果,“黑色1秒”依旧。

恼火之下,接着干脆南拳北腿一起出,南拳是在注册表(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\)中添加DisableTaskOffload=1(禁用TCP/IP Offload),北腿是在同样的注册表位置添加EnableRSS=1(Receive-Side Scaling,充分利用多核CPU的优势提高网络处理性能,详见这里)。

注册表设置好之后,重启计算机。。。

结果敌人被成功被击倒!自13:30左右被击倒后,到现在(21:20)也没爬起来(黑色1秒没出现)。如果明天一天还没能爬起来,我们就可以宣布获胜了。

后来,我们在另外一台服务器上发现只要用拳头(只添加DisableTaskOffload=1)就可以把敌人干倒,到目前也没爬起来,这还要进一步观察。

是否真的能三招致胜,明天就会见分晓!

【更新】

结果,第二天早上黑色1秒再次出现。

【第三招增强版】

后来发现北腿出错了,应该是禁用Receive-Side Scaling。Windows Server 2012中默认就启用了Receive-Side Scaling,可以通过以下命令查看:

netsh int tcp show global

命令运行结果:

所以第三招增强版就是禁用Receive-Side Scaling,操作命令如下:

netsh int tcp set global rss=disabled

命令运行结果:

禁用Receive-Side Scaling之后有个意外的发现,CPU的8个核的负载分配更均匀了。

第三招增强版的效果还需要一段时间的观察。

【参考资料】

Windows Server 2008 network speed slow, Xen 3.4.3 HVM ISO

XenServer – Windows 2003 TCP checksum issue(文中有一个地方写错了,应该是DisableTaskOffload=1)

Citrix XenServer Slow Network Performance

TCP Offload Performance Impact

Performance Tuning Windows 2012: Network Subsystem–Part 1

云计算之路-阿里云上:消灭“黑色n秒”第三招——禁用网卡的TCP/IP Offload的更多相关文章

  1. 云计算之路-阿里云上:“黑色1秒”问题与2009年Xen一个补丁的故事

    在之前对“黑色1秒”问题的分析博文中,我们将最大嫌疑对象锁定在了Xen,在这篇博文我们将从Xen的角度进行分析.也许有人会问,为什么不知道天多高地多厚地去研究不属于自己范围的问题?只因我们对一个问题的 ...

  2. 云计算之路-阿里云上:“黑色1秒”最新线索——w3tp与w3dt

    向大家分享一下最近排查“黑色1秒”问题的进展,“黑色1秒”的问题表现详见什么是黑色1秒. 1. 发生在w3wp进程内 判断依据:“黑色1秒”期间,http.sys的HTTP Service Reque ...

  3. 云计算之路-阿里云上:从ASP.NET线程角度对“黑色30秒”问题的全新分析

    在这篇博文中,我们抛开对阿里云的怀疑,完全从ASP.NET的角度进行分析,看能不能找到针对问题现象的更合理的解释. “黑色30秒”问题现象的主要特征是:排队的请求(Requests Queued)突增 ...

  4. 云计算之路-阿里云上:Web服务器遭遇奇怪的“黑色30秒”问题

    今天下午访问高峰的时候,主站的Web服务器出现奇怪的问题,开始是2台8核8G的云服务器(ECS),后来又加了1台8核8G的云服务器,问题依旧. 而且3台服务器特地使用了不同的配置:1台是禁用了虚拟内存 ...

  5. 云计算之路-阿里云上:原来“黑色0.1秒”发生在socket读取数据时

    在昨天的博文(云计算之路-阿里云上:读取缓存时的“黑色0.1秒”)中我们犯了一个很低级的错误——把13ms算成了130ms(感谢陈硕发现这个错误!),从而对问题的原因作出了错误的推断,望大家谅解! 从 ...

  6. 云计算之路-阿里云上:SLB会话保持的一个坑

    冒着被大家厌烦的风险,今天再发一篇“云计算之路-阿里云上”.这是在前一篇发过之后真实发生的事情,我们觉得定位问题的过程值得分享.而且估计园子里不少朋友被这个问题骚扰过,我们有责任让大家知道问题的真正原 ...

  7. 云计算之路-阿里云上-容器难容:容器服务故障以及自建 docker swarm 集群故障

    3月21日,由于使用阿里云服务器自建 docker swarm 集群的不稳定,我们将自建 docker swarm 集群上的所有应用切换阿里云容器服务 swarm 版(非swarm mode). 3月 ...

  8. 云计算之路-阿里云上-新发现:又一种与虚拟内存有关的CPU波动情况

    在云上真是无奇不有,昨天偶然间发现在IIS的应用程序池回收设置中,仅仅设置了一下基于虚拟内存限制的回收,就引发了CPU有规律的波动.在这篇博文中,我们将向大家汇报一下云计算之路上的这个小发现. 在之前 ...

  9. 云计算之路-阿里云上:启用Windows虚拟内存引发的CPU 100%故障

    今天上午11:35~11:40左右,由于负载均衡中的两台云服务器CPU占用突然飚至100%,造成网站5分钟左右不能正常访问,请大家带来了麻烦,请谅解! (上图中红色曲线表示CPU占用) 经过分析,我们 ...

随机推荐

  1. JavaWeb的学习之Servlet(转载自孤傲苍狼)

    一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...

  2. Getting Started with WebRTC [note]

    Getting Started with WebRTC 原文 RTCPeerConnection 1.caller和callee互相发现彼此 2.并且交换capabilities信息 3.初始化ses ...

  3. unity 计时器

    2017年1月3号,周二,晴. //设置时间 float tempTime = 5; void OnGUI(){ //设置显示 GUI.Label (new Rect(100,100,100,100) ...

  4. EBS excel模板xml publisher开发

    前提: BI publisher下载地址: http://www.oracle.com/technetwork/middleware/bi-publisher/downloads/index.html ...

  5. 强大好用的"文本"编辑器

    1 editplugs 说明:EditPlus是一款由韩国 Sangil Kim (ES-Computing)出品的小巧但是功能强大的可处理文本.HTML和程序语言的Windows编辑器,你甚至可以通 ...

  6. Mroonga 3.0.8 发布,MySQL 存储引擎

    Mroonga 3.0.8 支持 REPAIR TABLE 支持损坏的 groonga 数据库. Mroonga 是一个 MySQL 存储引擎,基于 Groonga,提供完整的全文搜索引擎.

  7. 如何做到在虚拟数据库和真实数据库之间自由切换?【低调赠送:QQ高仿版GG 4.4 最新源码】

    记得以前在公司上班时,有时候白天的活没干完,我就会把工作带回家晚上加班继续做.但是,我们开发用的数据库是部署在公司局网内部的一台服务器上的,在家里是肯定连不上这台机器的.在家里没有数据库,服务端就跑不 ...

  8. 人人都是 DBA(VIII)SQL Server 页存储结构

    当在 SQL Server 数据库中创建一张表时,会在多张系统基础表中插入所创建表的信息,用于管理该表.通过目录视图 sys.tables, sys.columns, sys.indexes 可以查看 ...

  9. C#入门基础三四

    数组:数组是一组具有相同类型的值的集合,可以通过索引来访问数组中的元素. 声明数组的语法: A.数据类型 [] 数组名称: B.数据类型 [] 数组名称 = new 数据类型[数组大小]; C.int ...

  10. 知方可补不足~row_number,rank,dense_rank,ntile排名函数的用法

    回到目录 这篇文章介绍SQL中4个很有意思的函数,我称它的行标函数,它们是row_number,rank,dense_rank和ntile,下面分别进行介绍. 一 row_number:它为数据表加一 ...