问题背景:
智能内容监审平台(chrome浏览器),部分页面操作响应特别慢,查询服务端接口响应很快(毫秒级)。
使用jemeter模拟客户端调用接口,接口响应很快。
问题排查思路:
- 本机到服务器的网络状况
网络状况正常,无延迟。
2. 查询服务端响应时间
接口耗时4毫秒,正常。
3. 抓取客户端数据包查看
Chrome浏览器自带抓包工具:chrome://net-internals/#events
分析以上文件,浏览器调用http://172.31.12.65:7000/source/lives
接口,从开始准备到最终发送http的head信息和http的body信息,只用了7毫秒时间,没有延迟情况。而浏览器读取响应数据花了21秒。
结合浏览器的开发者工具分析的耗时情况:
Waiting(TTFB),指从浏览器在建立连接并发送数据之后,等待服务端返回第一个字节的时间,总共是21秒。
到这里就是一个很奇怪的现象,接口很快但是返回到客户端很慢,继续分析。
4. 服务端抓包分析。
通过服务端抓包发现,从建立连接到客户端开始发送http头数据,隔了8秒时间,再到客户端发送http body数据又隔了9秒多。
从浏览器看,数据发送是很快的,一直在等待数据返回,但是从服务端看,请求的数据延迟了将近20秒才发到服务端,这是不合理的。
以上分析过程我们是从 客户端机器浏览器 – > 服务端机器分析,说明两者之间还有一个对请求做了延迟处理,客户端系统。
我本地系统为win10系统,按道理系统本身不会做这样的事,但是安全软件会。公司的dlp安全软件会对上传的数据进行校验,导致请求的延迟。
为了验证这个猜想,专门找了台没有安装dlp的机器做同样的操作,页面响应完全无问题。
Chrome浏览器安装插件Symantec 之后,响应速度降为2秒,该插件可以识别chrome的url,提升dlp的检测速度。
最终结论:
平常我们用本机进行web测试,出现的页面响应慢的问题(只要针对需要上传数据的接口,put方法很明显),主要是DLP安全软件对上传数据的行为做校验的原因。可通过安装Symantec 的方法提高校验速度,但是不能避免。可通过以上步骤协助排查。
对于DLP的检测原理和规则,由于该软件是外部厂商提供给公司这边试用的,暂时不了解原理。