WIN2012 TCP ECN 启用导致速度慢
发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,测试偶尔访问指定网站速度慢的原因1 现象 某业务在客户服务器上,开发人员反映周期性速度慢,开发人员反馈,由于需要到xxx.com去取数据,慢的原因是取数据慢直接访问该站点下载文件发下下载速度很快2 测
千家信息网最后更新 2025年02月07日WIN2012 TCP ECN 启用导致速度慢
测试偶尔访问指定网站速度慢的原因
1 现象 某业务在客户服务器上,开发人员反映周期性速度慢,开发人员反馈,由于需要到xxx.com去取数据,慢的原因是取数据慢
直接访问该站点下载文件发下下载速度很快
2 测试脚本如下
3 测试结果发现 是每次第一次访问xxx.com的时候的 建立连接的时间很慢,需要9秒以上
4 最终原因 操作系统启用了TCP ECN,而目的地路由器未使用ECN 导致TCP握手时间延长
netsh interface tcp set global ecncapability=disabled 关闭后正常
5 没有介绍TCP ECN 只是介绍如何发现问题原因
#!/bin/env python# -*- coding: utf-8-*-#author: skybug#date: 2017-12-2#web_perf_testimport urllib2,sys,pycurl,json,StringIOimport os,subprocessimport platform,_winreg#ipvip = socket.gethostbyname ("www.xxx.com")#获取DNS解析值 本次未用reload(sys)sys.setdefaultencoding('utf-8')iplist = ["113.x.x.1","113.x.x.x","x.x.x.x","x.x.x.x","x.x.x.x"]#vipgate,vip,cnki,cnki2,chaoxingurllist=["http://x.com","http://a.com"]UA = "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Mobile Safari/537.36"headers = {}def header_function(header_line): #获取响应头,本次未调用 header_line = header_line.decode('iso-8859-1') if ':' not in header_line: return name, value = header_line.split(':', 1) name = name.strip() value = value.strip() name = name.lower() headers[name] = valuedef webperf_keep(url,times=1): #获取访问页面的性能数据 b = StringIO.StringIO() #定义个IO流 pc=pycurl.Curl()#创建pycurl对象 cnt=0 alldata=[] for i in range(int(times)): pc.setopt(pycurl.URL,url) #设置访问url pc.setopt(pycurl.HTTPHEADER, ['Content-Type: application/json']) pc.setopt (pycurl.USERAGENT,UA)#设置UA pc.setopt(pycurl.MAXREDIRS,50) #MAX REDIRECT count#设置最大重定向次数 pc.setopt(pycurl.WRITEFUNCTION, b.write)#把相应内容写到流里 pc.setopt( pycurl.FOLLOWLOCATION,1)#跟踪重定向 pc.setopt(pycurl.FORBID_REUSE, 0)#允许复用连接 pc.setopt(pycurl.FRESH_CONNECT,0) pc.setopt (pycurl.HEADERFUNCTION, header_function)#把头信息写到头函数里 print "testing access {0} {1} times.....".format (url, cnt) pc.perform()#执行pycurl cnt+=1 dns_time = pc.getinfo(pycurl.NAMELOOKUP_TIME)#dns解析时间 conn_time = pc.getinfo(pycurl.CONNECT_TIME)#建立连接的时间(TCP握手) ttfb = pc.getinfo(pycurl.STARTTRANSFER_TIME)#TTFB的时间 total_time = pc.getinfo(pycurl.TOTAL_TIME)#总时间 http_code = pc.getinfo(pycurl.HTTP_CODE)#返回code http_conn_code= pc.getinfo(pycurl.HTTP_CONNECTCODE)# redirect_count = pc.getinfo(pycurl.REDIRECT_COUNT)#重定向次数 size_upload = pc.getinfo(pycurl.SIZE_UPLOAD) size_download = pc.getinfo(pycurl.SIZE_DOWNLOAD) size_header = pc.getinfo(pycurl.HEADER_SIZE) size_request = pc.getinfo(pycurl.REQUEST_SIZE) content_type = pc.getinfo(pycurl.CONTENT_TYPE) reponse_code = pc.getinfo(pycurl.RESPONSE_CODE) transfer_time = pc.getinfo(pycurl.PRETRANSFER_TIME) #传输时间 startrans_time= pc.getinfo(pycurl.STARTTRANSFER_TIME)#开始传输时间 speed_download = pc.getinfo(pycurl.SPEED_DOWNLOAD)#下载速度 speed_upload = pc.getinfo(pycurl.SPEED_UPLOAD)#上传速度 redirect_time = pc.getinfo(pycurl.REDIRECT_TIME)#重定向时间 num_conn = pc.getinfo(pycurl.NUM_CONNECTS)#建立连接的次数 last_socket= pc.getinfo(pycurl.LASTSOCKET)#最后一个socker data = [] perfdata={"dns_time":dns_time,"ttfb":ttfb,"total_time":total_time,"http_code":http_code,"redirect_count":redirect_count ,"size_upload":size_upload,"size_download":size_download,"size_header":size_header,"size_request":size_request ,"content_type":content_type,"reponse_code":reponse_code,"conn_time":conn_time,"transfer_time":transfer_time,"speed_download":speed_download ,"speed_upload":speed_upload,"startrans_time":startrans_time,"redirect_time":redirect_time,"http_conn_code":http_conn_code,"num_conn":num_conn,"last_socket":last_socket} data.append(url) data.append(perfdata) alldata.append(cnt) alldata.append(data) #pc.close() #b.close() jsondata=json.dumps({"perfdata":alldata},indent=4) pc.close() b.close() return jsondatadef getos():#获取操作系统版本 os = {} if sys.platform == "win32": try: reg_key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion") if reg_key: ProductName = _winreg.QueryValueEx(reg_key, "ProductName")[0] or None EditionId = _winreg.QueryValueEx(reg_key, "EditionId")[0] or None ReleaseId = _winreg.QueryValueEx(reg_key, "ReleaseId")[0] or None CurrentBuild = _winreg.QueryValueEx(reg_key, "CurrentBuild")[0] or None BuildLabEx = _winreg.QueryValueEx(reg_key, "BuildLabEx")[0][:9] or None os = {"ProductName": ProductName, "EditionId": EditionId, "ReleaseId": ReleaseId, "CurrentBuild": CurrentBuild, "BuildLabEx": BuildLabEx} jsondata = json.dumps({"OS": os}, indent=4) return jsondata except Exception as e: print e.message.decode(DEFAULT_LOCALE_ENCODING)def getcmd(shell):#执行cmd ps = subprocess.Popen(shell, shell=True, stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE) out, err = ps.communicate() return out.decode('cp936').encode('utf-8')def writelog(str): with open("result.txt",'a+') as fr: fr.write(str) fr.write("################################")if len(sys.argv) ==2 and sys.argv[1] == "full": cnt = 0 print "test setp {0},Collect routing information....".format(cnt) cmd="route print " writelog(getcmd(cmd))#获取路由表 print "test setp {0} ,Collect routing information....OK".format(cnt) cnt = cnt+1 print "test setp {0},Collecting network information....".format(cnt) cmd="ipconfig /all "#获取网卡配置 writelog(getcmd(cmd)) print "test setp {0},Collecting network information....OK".format(cnt) cnt = cnt+1 print "test setp{0},Collecting TCP information....".format(cnt) cmd = "netsh int tcp show global"#获取TCP全局配置 writelog(getcmd(cmd)) print "test setp{0},Collecting TCP information....OK".format(cnt) cnt=+1 print "test setp{0},Collecting OS information....".format(cnt) writelog(getos())#获取操作系统版本 print "test setp{0},Collecting OS information....OK".format(cnt) for index,item in enumerate(iplist): cmd="tracert "+item#获取路由跟踪 print "test setp {0},Collecting route tracking information....".format(cnt) writelog(getcmd(cmd)) print "test setp {0},Collecting route tracking information....OK".format(cnt) cnt=cnt+1 for index,item in enumerate(urllist): print "test setp {0},Collecting web to access information data....".format(cnt) writelog(webperf_keep(item)) print "test setp {0},Collecting web to access information data....OK".format(cnt) cnt=cnt+1 print "All test data collection is completed!"if len(sys.argv) ==3: url = sys.argv[1] times = sys.argv[2] print "pre test access {0} {1} times.....".format(url,times) writelog(webperf_keep(url,times))if len(sys.argv)==1: print "Please run web.perf.test full to full test \nor run web.perf.test 'http://www.xxx.com/' 10 ro run 10 times access test"
时间
速度
原因
操作系统
数据
次数
系统
路由
x.x.x.x
测试
人员
版本
传输
开发
跟踪
配置
最大
业务
信息
全局
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
mc服务器最低要求是什么
救生艇服务器
软件开发net方向课程关系
反恐精英ol总是重试连接服务器
服务器安全系统实施方案
lor国际服是哪个服务器
江西共青团网络安全公开课
九龙远程互联网医疗科技
传奇数据库刷装备
马云大数据美国服务器
网络安全ppt多元素14页
数据库中角色的作业
db2数据库查看表空间命令
网络安全公司市场部部门职责
网络安全手抄报内容幼儿园
服务器安全狗悬浮窗不见了
嘉定网络安全监测中心
数据库 查询父子节点数据
EDA软件开发的qa工程师
邯郸交友软件开发价格
对网络安全威胁
计算机网络技术产业行业
概括网络安全事件 申论
山西物流软件开发公司
服务器费电不
四川专业软件开发中心
深圳极速软件开发公司
云数据库调查
开源数据库安全吗
新寻仙最新服务器