重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
阿里云服务器偶尔连接不上的问题出现在我做了一些TCP优化之后,出现了公司内网偶尔会出现连接不上服务器的问题,但是切换其他的网络就可以正常连接。
目前创新互联建站已为近千家的企业提供了网站建设、域名、虚拟空间、网站改版维护、企业网站设计、宣州网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
1,登陆服务器查看资源使用top,vmstat等命令查看了一番发现服务器各项指标都没有异常。于是将问题转向了网络层。
2,本地使用ping服务器外网ip正常返回,无丢包,延迟也正常。
3,登录服务器查看tcp相关数据。
发现在卡顿时有大量tcp syn包被丢弃,数值一直在增长。
在查阅资料并结合实际情况后,发现该服务器同时启用了 tcp_timestamps和tcp_tw_recycle参数。
后想起,之前同事为改善time_wait连接数过多问题曾改过该内核参数。
解决办法是,关闭tcp_tw_recycle:
再观察,发现服务已正常,偶尔连接不上的现象消失。
我们先来man一下这两个参数(man tcp):
cp_timestamp 是 RFC1323 定义的优化选项,主要用于 TCP 连接中 RTT(Round Trip Time) 的计算,开启 tcp_timestamp 有利于系统计算更加准确的 RTT,也就有利于 TCP 性能的提升。(默认开启)
关于tcp_timestamps详情请见:
开启tcp_tw_recycle会启用tcp time_wait的快速回收,这个参数不建议在NAT环境中启用,它会引起相关问题。
tcp_tw_recycle是依赖tcp_timestamps参数的,在一般网络环境中,可能不会有问题,但是在NAT环境中,问题就来了。比如我遇到的这个情况,办公室的外网地址只有一个,所有人访问后台都会通过路由器做SNAT将内网地址映射为公网IP,由于服务端和客户端都启用了tcp_timestamps,因此TCP头部中增加时间戳信息,而在服务器看来,同一客户端的时间戳必然是线性增长的,但是,由于我的客户端网络环境是NAT,因此每台主机的时间戳都是有差异的,在启用tcp_tw_recycle后,一旦有客户端断开连接,服务器可能就会丢弃那些时间戳较小的客户端的SYN包,这也就导致了网站访问极不稳定。
主机A SIP:P1 (时间戳T0) --- Server 主机A断开后
主机B SIP:P1 (时间戳T2) T2 T0 --- Server 丢弃
经过此次故障,告诫我们在处理线上问题时,不能盲目修改参数,一定要经过测试,确认无误后,再应用于生产环境。同时,也要加深对相关内核参数的认识和理解。
本文解决灵感来自于
连不上,大多原因是网络问题。
首先,判断是不是机房网络问题,可以尝试访问其他网站,排除本地线路故障。
其次,针对云服务器IP做路由测试,追踪是不是线路路由中间节点问题,进一步确认是否机房线路问题。
最后,大致可以锁定是机房线路问题,需要联系对方技术人员协助解决。
当然,连不上还有2种情况,一种是系统设置问题,由于系统某个软件设置导致或设置了远程端口号都有可能连不上。另一种是本地问题,如果本地做有策略无法使用远程。
你点一下网络图标看看是不是其中有一个网卡连不上网?如果是这样的话那就是正常的,因为连不上网的哪个是内网网卡,你也不用去动,因为内网网卡本来不是为了上网的,而是和内网机器通信用的。
程连接密码和root或administrator用户的实例登录密码。
登录ECS管理控制台。
在左侧导航栏,单击实例与镜像 实例。
在顶部状态栏左上角处,选择地域。
找到已创建的实例ecs-01,在操作列,单击远程连接。
在弹出的输入远程连接密码对话框中,单击修改远程连接密码。
根据提示完成密码修改,并在输入远程连接密码对话框中输入您修改后的密码,然后单击确定。
如果是非I/O优化实例,您需要重启ECS实例使修改的密码生效。
根据ECS实例的操作系统,执行不同的操作:
Linux系统:输入用户名root和实例登录密码。输入密码阶段,Password:处保持黑屏,仅光标闪烁提示。root密码
Windows Server系统:
在管理终端界面的左上角,选择发送远程命令 CTRL+ALT+DELETE。CTRL+ALT+DELETE
进入Windows实例的登录界面,输入实例登录密码。