我原来的一个学生今天给我打电话说他们网站访问的时候特别慢,让我帮他分析一下原因。原来也有一些朋友问过我类似的问题,今天晚上特意写了这篇文章跟大家分享,希望对大家有所帮助。假如你是运维人员你会如何做?原因大概有几个方面呢?如果你已经有一定的运维经验了,希望你能够先自己想一下,看一下自己想到的有哪些方面,然后再往后看,这对你总结问题会很有帮助奥。我总结大概有几个方面:

    第一个方面,网络问题。网络问题可能细分为几种,1. 用户本身的网络慢,比如有的用户为了省钱会在一些小运营商那里拉宽带,其实贱钱无好货在这里也是适应的。这些小运营商为了省钱,他们的带宽一般都比较差,甚至是外省的资源。有得朋友明明在北京上网,ip138却显示你是天津的ip就是这个原因。最简单的判断方法就是你去tracert一个比较大网站,比如www.so.com看一下有多少跳,一般情况下在10跳左右如果比这个大很多就可能是这个问题了。

    第二个方面是跨运营商的问题。比如用户的网络是电信,而你们服务器放在联通机房。大家都知道中国的运营商之间的网络联通情况是比较糟糕的,一旦出现这种跨运营商访问的时候就非常容易出问题,这时候可以选择把服务器放到双线或者多线机房里来解决问题。

    第三个方面,劫持问题。这种情况必须有一定的运维经验的人才会了解。一般情况下一些小得运营商,特别是移动经常会出现这个情况。前段时间我们360软件管家的运营部门联系我说有几个某省移动网的用户在用软件管家时出现白屏的情况,让我协助他们分析一下原因。我在联系用户获得相应的信息,分析之后发现在用户端访问我们域名时解析出来的ip是错的,根本不是我们服务器的ip。很显然这是移动劫持了我们软件管家用得某些域名。其实劫持有好几种,这只是其中一种,等我有时间再专门针对劫持跟大家做一次分享。

    第四个方面,服务器负载过大。首先根据报警系统,比如收到的手机短信来判断是提供服务的所有节点都有报警还是个别节点有报警。如果是大面积的报警可能是你们的业务受到了***或者是最近一版的网站代码有bug。这时你可以去服务器上面用netstat等命令来看一下服务器的tcp连接情况。假如连接数并不是太多,比如你们用的是nginx,一般情况在用户量不是太大的情况下,几百个或者一千甚至几千的连接数都是正常,这个你要根据你们实际的业务来判断。如果跟正常的连接数差不多但访问特别慢得话,可能是程序代码有问题,这时候要及时联系开发一起来分析问题的原因;比如用strace来跟踪nginx进程看一下具体的原因。假如有大量的tcp连接(一般都会上万),并且状态为SYN_RECV的特别多,恭喜你,你的服务器很可能是受到***了。有过类似经历的朋友可能会说在服务器遭到这个规模的sync***时netstat根本就没响应,甚至把一个cpu打满。别急,这里有一个比较时髦的命令ss,这个时候你用 ss加上at参数可以很快把tcp的连接情况显示出来。 然后就可以用我原来写得iptables文章中得防DDOS的脚本来阻止这些ip的访问就ok了。如果是个别服务器响应慢得话就得具体分析了。这个我会专门写个如何判断服务器负载大的文章来专门分析这个情况。暂时想到的就这么多,大家有想到的可以再告诉我,我再补充,大家一起提高。不早了,睡觉了,明天还得上班呢....

    对了大家觉得如果对自己还有那么一点点帮助的,希望大家多点赞,多评论,感谢!!!大家可以加入运维交流群:325525293 来一起交流。