# 请求慢网络排查方案

本指导书以如下网络环境举例:

举例网络拓扑图

# 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)

11fc101f63d3a517b0c0d30bbf4a8d2

第一次打开会要求登录账号密码,如果没有,直接关闭,重新打开会自动进入下图这样子无需账号密码登录的界面。(其实可以注册一个没啥影响)

55e3796d8c04944b76cf3d697fdafe9

下一步就是新建页面,如下图:

8b0657a1dd71678eacf5e6844e04ed5

# 使用PostMan测试GET接口

步骤:

(一)选择请求的方式

22804b1dcc4baa25bf74c8793fd3c56

  1. 写请求的URL地址

f7c9a9203e235ad6c86857f0f5b14e1

  1. 填写请求的参数

    9b0d027d22e7d2c57f834fffd4c73f6

  2. 点击Send按钮发起GET请求

    b96e6ac345e6714e5cf8098dc56d0ec

  3. 查看服务器响应的结果

    25bcf1048e06120f864f49ea3f41f83

# 使用PostMan测试POST接口

步骤:

1、选择请求的方式

2、填写请求的URL地址

3、选择Body面板并勾选数据格式

4、填写要发送到服务器的数据

5、点击Send按钮发起POST请求

6、查看服务器响应的结果

唯一不同的地方是第三步:选择Body面板并勾选数据格式,其余步骤相同(没有参数的可忽略)

43673c513f2238d4d80fdcd0f56b6de

参考链接: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

创建人:zhangpan