1、背景
最近部署了一台web服务器,上架后用户那边反映打开很慢,我尝试用外网打开发现确实慢,包括ssh登录就特别慢,于是产生了分析与解决的想法。
2、分析
检查了网线和上联端口的带宽,发现都没问题,ping1000字节的包也就2ms,说明中间网络设备环节应该没问题,猜想应该和服务器配置数据上有关系。
服务器上只配置了web服务、mysql、ftp,无其他服务,套件都是笔者之前测试过的。既然向服务器发请求时响应慢,那就从服务器抓响应包吧。于是输入:
tcpdump -i eth0 -w data.pcap
然后启动ssh登录,输入用户名后,7、8秒钟才出现输入密码;浏览器打开服务器根目录的index文件,4、5秒钟才正常加载。然后ctrl+c停止抓包,下载抓的包后用ssh过滤如下:
通过包数据可见,在21-30包之间有近10秒钟,那么需要知道序号21-30的包数据里服务器在干嘛,可以通过
frame.number>21&&frame.number<30
来过滤显示,过滤后的数据如下:
可见这10秒服务器上一是dns在发请求,二是DHCPv6在请求地址,导致响应必须要等候。为了验证是不是这个问题,可以在过滤条件上输入http来查看http的数据,如下:
可见在55-71的数据包之间也是10秒钟,输入
frame.number>21&&frame.number<30
来查看这些包,如下:
和上面分析类似,同样是DNS在作怪。
3、解决
ssh到服务器,输入setup,操作如下:
将主备dns删去,重启下服务。重新打开测试,正常。
4、总结
出现这个问题应该是当时部署服务时的失误,因为当时部署时更新了gcc等一些编译器和库的版本,所以需要设置静态地址和dns,后来因为考虑到实际使用中不需要dns解析域名所以就没把dns去掉,才出现了上面所述问题。