舒畅 发表于 2019-2-22 12:02:58

AWS 实战分享1

    系统迁移到AWS上(Web+WCF+RDS),果断采用的RDS sql server , 不想再花费精力及备份数据库。 但从一开始 WCF连结RDS 就不定时爆出如下Error:
(provider:TCPProvider,error:0-Thesemaphoretimeoutperiodhasexpired


    在AWS forum 上发了咨询贴 ,也咨询了AWS 专家,回复一般是优化sql ,但我看看数据库资料,虽然加了一些index,但error持续,并且数据量还远不到要深度优化的地步。并且以前运行在机房时都是好好的,难道只能升级RDS DB 到large(只有RDS数据库级别比原先差),但目前RDS CPU ,connection,IPOS 都还很正常,不想花那冤枉钱。


    Google "semaphoretimeout" 发现这是windows 网络issue ,参见:
http://support.microsoft.com/kb/325487?wa=wsignin1.0
      但部署在AWS 上的EC2可控的只有操作系统了,在Aws forum逛了很久很久,终于发现新的关联贴
https://forums.aws.amazon.com/thread.jspa?messageID=477159


正解如下 :
      IPv4 checksum offload - disable
      large receive offload - disable
      large send offlaod - disable
      tcp checksum offload - disable
      上图:

https://s1.运维网.com/attachment/201308/120644622.png
https://s1.运维网.com/attachment/201308/120646377.png






结果 : 目前已运行近一周,还未出现此error ,看来有效,还会持续观察。


    此设定的用意是让网卡硬件自己计算校验和,而不是交给操作系统的 tcp/ip 协议栈来计算。看来Ec2 Windows instance 有些Bottleneck ,也可能操作系统需要更改一些设定项吧(待查)。
          当然如果你的数据库达到百万级或者更高,也需考虑优化sql。

  




页: [1]
查看完整版本: AWS 实战分享1