# 请求慢网络排查方案
本指导书以如下网络环境举例:
# 1、问题1:移动端访问慢
# 1.1服务器本机测试
# 1.1.1浏览器登陆测试
网络方向上排查思路,首先判断是否是网络导致;可以通过在服务器本机模拟M3的H5接口调用测试。
在服务器本机使用http://127.0.0.1:端口登陆OA页面(没桌面的找与服务器同网段的PC),然后在同一个浏览器里输入H5的访问地址 (PC端登陆界面seeyon 后面加如下参数H5/wechat/html/allApps.html)
若是服务器本机上验证没有问题,那么就依次往外移动一个网络节点测试(按网关设备分节点),当前环境就是OA服务器------网络防火墙------nginx------WAF------IPS------网络防火墙------DDOS ------VPN这样一个链路,可以根据这个节点访问OA测试问题时候复现(访问地址根据所过的网关后访问网络可达的地址),问题在那个节点复现网络上就核查这个节点(核查网关日志、流量转发有无丢包)
# 1.1.2Postman测试
下载地址:https://www.postman.com/downloads/ (opens new window)
第一次打开会要求登录账号密码,如果没有,直接关闭,重新打开会自动进入下图这样子无需账号密码登录的界面。(其实可以注册一个没啥影响)
下一步就是新建页面,如下图:
# 使用PostMan测试GET接口
步骤:
(一)选择请求的方式
- 写请求的URL地址
填写请求的参数
点击Send按钮发起GET请求
查看服务器响应的结果
# 使用PostMan测试POST接口
步骤:
1、选择请求的方式
2、填写请求的URL地址
3、选择Body面板并勾选数据格式
4、填写要发送到服务器的数据
5、点击Send按钮发起POST请求
6、查看服务器响应的结果
唯一不同的地方是第三步:选择Body面板并勾选数据格式,其余步骤相同(没有参数的可忽略)
参考链接:https://blog.csdn.net/m0_61843874/article/details/123324727 (opens new window)
# 1.1.3Curl命令测试
Linux/windous下执行curl命令发送post请求
curl -X POST -H "Content-Type: application/json" -H "referer:http://localhost" http://localhost:8080/test/file/import -d '{"param":"20210608"}'
H表示请求头,-d表示参数
参考案例:
curl -v http://localhost:8080/JsonSendSms -d '{"mobile":"00000000000","smsID":"12345678999","smscontent":"this is a test2"}' -X POST -H "Content-Type: application/json" -k
详细信息可以参考如下链接,具体的测命令需要对应的接口开发给出参数
参考链接:https://blog.csdn.net/weixin_49114503/article/details/119679741 (opens new window)
# 1.2网络抓包
# 1.2.1Fiddler抓包
在PC端安装fidder后,移动端和PC端连同一个WIFii,然后修改移动端手机wifii为PC端的地址和8888端口,这样就可以抓手机端的流量了,具体方法如下链接。
安卓抓包:
https://www.jianshu.com/p/b90901c1f19d (opens new window)
苹果手机抓包:
https://www.jianshu.com/p/cf03ac3c51dd (opens new window)
http://oa.testxt.com/seeyon/officeservlet (opens new window) 如下截图这个是插件打开附件的耗时,耗时时间根据文件的大小而定是那这个请求分析耗时;
如下截图是请求的耗时分布,可以看到15:56:56.942 server收到请求15:56:58.077 server开始响应这个之间的时间差就是后端处理耗时。
# 1.2.2Wireshake抓包
下载地址:https://www.wireshark.org/download.html (opens new window)
需要在PC端安装wireshake,然后PC端发出wifi移动端去连接PC端发出的wifi来抓移动端的包,wireshake在抓包时需要选择wifi的网卡。
抓包完成后保存抓包文件
# 1.3负载排查
拿nginx举例,排查nginx负载请求转发耗时需要开启access.log日志,并在日志上加上request_time(整个请求的总时间 )、和upstream_response_time (从Nginx向后端建立连接开始到接受完数据然后关闭连接为止的时间),从这两个参数可以分析到请求耗时是在后端、前端还是网络上。
在ngin.conf 添加如下日志格式可以打印这两个时间,若还需要打印其他信息可以自行调整。 log_format main '{' '"$time_local","remote_user":"$remote_user",' '"request_time":$request_time,"upstream_response_time":$upstream_response_time,' '"request":"$request","status":"$status","body_bytes_sent":"$body_bytes_sent","http_referer":"$http_referer",' '"upstream_addr":"$upstream_addr","upstream_status":"$upstream_status"' '}'; access_log logs/access.log main;
如下截图日志request_time时间较大达到了60秒以上,upstream_response_time耗时基本都是几十毫秒,这种现象表明请求耗时在nginx之前到客户端的那一段网络上,而不在后端,需要负责网络维护的技术支持人员进一步分析处理。
如上现象问题在本文举例的拓扑图中就可以排查WAF、IPS、网络防火墙、DDOS这些设备,可以根据对应设备的日志或者抓包核查这些设备上的请求耗时,每个设备都核查日志比较繁琐有时网关设备不一定有这类日志,那么比较单间的方法就是网络链路分节点测试,验证问题会在那个节点复现。
# 问题2:PC端访问慢
# 2.1服务器本机测试
# 2.1.1浏览器登陆测试
问题界面按F12打开devtools 查看network模块勾选上disable cache 然后复现问题,当前界面的请求就会在下面的窗口输出,输出的请求会记录耗时、请求具体的URL 这些,定位慢请求时可以根据这个筛选,可以保存当前界面请求。
如下请求就是耗时长的,点击进去可以看到耗时是在等待服务器响应
# 2.1.2其他工具或者命令测试
同1.1.2、1.1.3
# 2.2网络抓包
# 2.2.1 fiddler抓包
客户端抓包:
https://www.jianshu.com/p/fee9e102f787 (opens new window)
抓包文件分析方法和1.2.1 都是一样的
# 2.2.2Wireshake抓包
下载地址:https://www.wireshark.org/download.html (opens new window)
下载wireshake 工具安装后,双击打开选择需要抓包的网卡就可以自动抓包,完成后保存抓包文件
# 2.3负载排查
同1.3