粗糙记录网站加载过慢的一次排查经历

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了粗糙记录网站加载过慢的一次排查经历相关的知识,希望对你有一定的参考价值。

2018/05/29
今天上班,程序员和我说测试环境的站点打开很慢,让我排查一下。作为菜鸟,还是首次遇到这样的问题,于是使用top查看系统资源,以CPU和内存分别排序查看,情况如下图:

技术分享图片

从负载上看load average: 0.51, 0.98, 1.12并无异常,这里说明一下服务器使用的是阿里云ECS,2vCPU4G。且看%CPU比例,用户态和系统态的CPU使用率并不高,可以暂且排除病毒侵入的情况。在使用netstat -tnl查看是否存在异常开启的端口。

[[email protected] ~]$ netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:8081            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:888             0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:32000         0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:42914           0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN     
tcp6       0      0 :::46710                :::*                    LISTEN     

从端口上看并未开启异常端口,于是查看阿里云监控数据,如下:

技术分享图片
技术分享图片
技术分享图片

从以上3张监控图发现CPU使用率在某一时刻急剧上升,磁盘读写量增加,网络流量增加,TCP连接数增加。由于测试环境的域名是不对外使用的,只有公司内部技术人员使用,于是查看是否存在TIME_WAIT状态过多,导致TCP连接过慢。

[[email protected] ~]$ netstat -an |grep TIME_WAIT
......
tcp        0      0 192.168.100.171:36234   192.168.100.172:3306    TIME_WAIT  
tcp        0      0 192.168.100.171:48108   192.168.100.170:6379    TIME_WAIT  
tcp        0      0 192.168.100.171:48016   192.168.100.170:6379    TIME_WAIT  
tcp        0      0 192.168.100.171:47966   192.168.100.170:6379    TIME_WAIT  
tcp        0      0 127.0.0.1:53384         127.0.0.1:8081          TIME_WAIT  
tcp        0      0 192.168.100.171:48082   192.168.100.170:6379    TIME_WAIT  
tcp        0      0 192.168.100.171:47930   192.168.100.170:6379    TIME_WAIT  
tcp        0      0 127.0.0.1:53566         127.0.0.1:8081          TIME_WAIT  
......

从命令行查看,6379端口的TIME_WAIT数量较多,于是登陆阿里云Redis查看性能数据,发现在某些时段的QPS很高,高于生产环境的QPS,于是初步判断问题出在Redis上。如图:

技术分享图片

再次进行统计6379端口的TIME_WAIT数量,发现居然有3万多个......难怪网站打开慢了!!!最终解决:清空redis数据后,再重新加载网站正常。
注意:这里使用的Redis只作为程序的缓存使用!!!网站访问会优先从redis读取数据!

[[email protected] ~]$ netstat -an |grep TIME_WAIT|grep 6379|wc -l
31526

至于TIME_WAIT优化可以参考一下链接:
http://blog.51cto.com/leven/382097

以上是关于粗糙记录网站加载过慢的一次排查经历的主要内容,如果未能解决你的问题,请参考以下文章

关于stackoverflow网站访问过慢的问题

解决GitHub图片加载不出来或加载过慢的问题

记一次微信小程序页面加载慢的排查过程

关于WPF的ComboBox中Items太多而导致加载过慢的问题

解决vue项目首页加载过慢的情况

处理EF第一次加载过慢问题