起因
项目上预发后网关,非常不稳定,经常超时。影响测试测
排查
- 测试给了预发url 一个需要token和一个不需要
- 使用bash脚本 ping 域名(如果ip网不正常,会大量丢包)
- 使用bash脚本curl请求网关(如果连接正常,返回200)
bash脚本
# --connect-timeout为连接超时,http请求tcp无法握手
watch -n 2 'curl --connect-timeout 2 xxxurl ; echo "`date` result: [$?]" >> r1.txt'
结果
ping 结果没有任何丢包
curl结果
# 第一行成功数 第二行失败数(curl 28errorcode为连接超时)
wc -l r.txt ;fgrep '[28]' r.txt |wc -l
495 r.txt
76
失败率
76/(76+495)=13.3%
解决
联系运维,排查发现是k8s内部dns解析问题,第二天在使用脚本检测
import datetime
import time
import requests
import schedule
url_ok_failed_dict = {
'url1': [0, 0],
'url2': [0, 0],
}
def job():
p_str = ''
for pre_url, ok_failed in url_ok_failed_dict.items():
try:
resp = requests.get(pre_url,
# connect 和 read timeout 秒
timeout=(2.0, 5.0))
print(resp.text[:20])
ok_failed[0] += 1
except Exception as e:
ok_failed[1] += 1
print(e)
p_str += f' url: {pre_url.split("/")[-1]} ok:{ok_failed[0]} failed:{ok_failed[1]} ' \
f'failed percent: {ok_failed[1] / (ok_failed[0] + ok_failed[1]):.1f}'
print(str(datetime.datetime.now()) + p_str)
schedule.every(2).seconds.do(job)
if __name__ == '__main__':
while True:
schedule.run_pending()
time.sleep(0.5)