性能测试分析案例-定位DNS解析很慢

环境准备

预先安装 docker 等工具,如 apt install docker.io。

操作和解析

执行下面的命令,拉取案例中使用的 Docker 镜像:

docker pull feisky/dnsutils

运行下面的命令,查看主机当前配置的 DNS 服务器:

cat /etc/resolv.conf

在这里插入图片描述
执行下面的命令,进入今天的第一个案例。如果一切正常,你将可以看到下面这个输出:

docker run -it --rm -v $(mktemp):/etc/resolv.conf feisky/dnsutils bash

在这里插入图片描述
继续在容器终端中,执行 DNS 查询命令,我们还是查询 www.csdn.net 的 IP 地址:

nslookup www.csdn.net 

在这里插入图片描述
这个命令阻塞很久后,还是失败了,报了 connection timed out 和 no servers could be reached 错误。
到底是不是网络不通了,我们用 ping 工具检查试试。执行下面的命令,就可以测试本地到 100.100.2.136的连通性:

 ping -c3 100.100.2.136

在这里插入图片描述
可以看到网络是通的。那要怎么知道 nslookup 命令失败的原因呢?这里其实有很多方法,最简单的一种,就是开启 nslookup 的调试输出,查看查询过程中的详细步骤,排查其中是否有异常。
继续在容器终端中,执行下面的命令:

nslookup -debug www.csdn.net 

在这里插入图片描述nslookup 连接环回地址(127.0.0.1 和 ::1)的 53 端口失败。这里就有问题了,为什么会去连接环回地址,而不是我们的先前看到的 100.100.2.136呢?
有可能是因为容器中没有配置 DNS 服务器。那我们就执行下面的命令确认一下:

cat /etc/resolv.conf

执行下面的命令,在配置好 DNS 服务器后,重新执行 nslookup 命令。自然,我们现在发现,这次可以正常解析了:

echo "nameserver 100.100.2.136" > /etc/resolv.conf
nslookup www.csdn.net 

在这里插入图片描述
我们再来看第二个案例。执行下面的命令,启动一个新的容器,并进入它的终端中:

$ docker run -it --rm --cap-add=NET_ADMIN --dns 8.8.8.8 feisky/dnsutils bash

运行 nslookup 命令,解析 www.csdn.net 的 IP 地址。不过,这次要加一个 time 命令,输出解析所用时间。如果一切正常,你可能会看到如下输出:

time nslookup www.csdn.net
Server:         8.8.8.8
Address:        8.8.8.8#53Non-authoritative answer:
www.csdn.net    canonical name = 55cb88f4.csdn.net.cname.yunduns.com.
Name:   55cb88f4.csdn.net.cname.yunduns.com
Address: 220.185.184.16
Name:   55cb88f4.csdn.net.cname.yunduns.com
Address: 125.44.163.58
Name:   55cb88f4.csdn.net.cname.yunduns.com
Address: 123.129.227.66
Name:   55cb88f4.csdn.net.cname.yunduns.com
Address: 117.149.203.81
Name:   55cb88f4.csdn.net.cname.yunduns.com
Address: 112.47.52.134real    0m10.349s
user    0m0.006s
sys     0m0.004s

这次解析非常慢,居然用了 10 秒。如果你多次运行上面的 nslookup 命令,可能偶尔还会碰到下面这种错误:

/# time nslookup www.csdn.net
;; connection timed out; no servers could be reachedreal  0m15.011s
user  0m0.006s
sys  0m0.006s

碰到这种情况该怎么处理呢?
DNS 服务器本身有问题,响应慢并且不稳定;
或者是,客户端到 DNS 服务器的网络延迟比较大;
再或者,DNS 请求或者响应包,在某些情况下被链路中的网络设备弄丢了。
ping 可以用来测试服务器的延迟。比如,你可以运行下面的命令:

/# ping -c3 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=31 time=137.637 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=31 time=144.743 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=31 time=138.576 ms
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 137.637/140.319/144.743/3.152 ms

在这里插入图片描述
这里的延迟已经达到了 51ms,这也就可以解释,为什么解析这么慢了。
既然延迟太大,那就换一个延迟更小的 DNS 服务器,比如电信提供的 114.114.114.114。

ping -c3 114.114.114.114

在这里插入图片描述
执行下面的命令,更换 DNS 服务器,然后,再次执行 nslookup 解析命令:

echo nameserver 114.114.114.114 > /etc/resolv.conf
time nslookup www.csdn.net

在这里插入图片描述
多次运行 nslookup 命令

 time nslookup www.csdn.net
Server:         114.114.114.114
Address:        114.114.114.114#53Non-authoritative answer:
www.csdn.net    canonical name = 55cb88f4.csdn.net.cname.yunduns.com.
Name:   55cb88f4.csdn.net.cname.yunduns.com
Address: 220.185.184.16real  	0m1.045s
user    0m0.005s
sys     0m0.005s

1s 的 DNS 解析时间还是太长了,对很多应用来说也是不可接受的。那么,该怎么解决这个问题呢?
dnsmasq 是最常用的 DNS 缓存服务
继续在刚才的容器终端中,执行下面的命令,就可以启动 dnsmasq:

/etc/init.d/dnsmasq start

修改 /etc/resolv.conf,将 DNS 服务器改为 dnsmasq 的监听地址,这儿是 127.0.0.1。接着执行多次 nslookup 命令:

echo nameserver 127.0.0.1 > /etc/resolv.conf
time nslookup www.csdn.net

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/615772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

你知道谁才是 “最懂程序员” 的搜索引擎?

大家好,我是奇兵,作为一名程序员,我们开发的过程中几乎每天都和搜索引擎打交道,利用它来搜文档、解决 Bug 等等。 而随着 AI 的发展,搜索引擎也变得越来越智能,市面上也涌现除了越来越多的 AI 搜索引擎。 …

【qt】sdk写pro写法,cv,onnx,cudnn

我的sdk在OpenCV003项目里: pro中添加 CONFIG(release, debug|release) {LIBS -L$$PWD/sdk/onnxruntime-x64-gpu/lib/ -lonnxruntimeLIBS -L$$PWD/sdk/onnxruntime-x64-gpu/lib/ -lonnxruntime_providers_cudaLIBS -L$$PWD/sdk/onnxruntime-x64-gpu/lib/ -lon…

GBASE南大通用GBaseCommandBuilder 类

自动生成单表命令,当使用 GBASE南大通用DataSet 对象的方法将变更的内容写回到对应数据库时,需使用GBASE南大通用 GBaseCommandBuilder 进行协调关联。无法继承此类。 对于该类所有成员的列表,参考 GBaseCommandBuilder 成员。 一、继承层次…

深入探索JavaScript中实用而高级的Rest参数和Spread语法

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 函数是JavaScript这个语言的核心,而如何处理函数的参数是函数编程中非…

深度学习工具-Amazon SageMaker使用

Amazon SageMaker 深度学习程序可能需要很多计算资源,这很容易超出你的本地计算机所能提供的范围。云计算服务允许你使用功能更强大的计算机更轻松地运行本书的GPU密集型代码。 注册 首先,我们需要在注册一个帐户https://aws.amazon.com/。 为了增加安…

io.lettuce.core.RedisCommandExecutionException: NOAUTH Authentication required.

报错信息: 浏览器中的报错信息 IDEA中的报错信息 报错原因: SpringBoot整合Redis使用的默认配置,但是我们设置了Redis的密码,而默认配置中密码是为空的,导致不能够连接 浏览器中的报错信息 There was an unexpected …

ChatGLM2-6B 大语言模型本地搭建

ChatGLM模型介绍: ChatGLM2-6B 是清华 NLP 团队于不久前发布的中英双语对话模型,它具备了强大的问答和对话功能。拥有最大32K上下文,并且在授权后可免费商用! ChatGLM2-6B的6B代表了训练参数量为60亿,同时运用了模型…

[解决思路]关于h264裸流合成mp4时时间戳添加问题

问题场景: 使用GPU编码(Opencv)生成的h264视频片段中不包含时间戳信息,且含有B帧,直接合成mp4后会导致播放出现问题(瞬间播放完成)。因此,在合成时需要手动添加时间戳。 心路历程: 发现生成的视频会瞬间播放完成后&am…

Mac/Linux虚拟机CrossOver2024新版下载使用教程

CrossOver不像Parallels或VMware的模拟器,而是实实在在Mac OS X系统上运行的一个软件,该软件可以让用户在mac是上直接运行windows软件,本文为大家带来的是CrossOver Mac版安装教程! CrossOver Mac-安装包下载如下:http…

zookerper入门

zookerper介绍 ZooKeeper 是一个开源的分布式协调框架,主要用来解决分布式集群中应用系统的一致性问题. ZooKeeper本质上是一个分布式的小文件存储系统(Zookeeper文件系统监听机制).提供基于类似于文件系统的目录树方式的数据存储,并且可以…

typora导出html添加目录

typora导出html添加目录 使用方法 首先要从typora导出html文件,之后用记事本编辑器html文件 找到文档最后面,如图: 用文字编辑类工具打开sideBar.txt,复制其中所有内容【内容在下面】 在如上图的位置插入所复制的内容 打开修改…

漏油控制器有用吗?漏油监测器多少钱一个?

漏油控制器也可以被称作漏油监测器、漏油传感器,是漏油检测系统里的一部分,一般是和漏油检测绳组合在一起使用,用来检测油罐、输油管道、油类化工厂等场合是否有油料泄露。很多人刚开始可能会觉得难以置信,这么一个小东西就可以检…

SPDK中常用的性能测试工具

本文主要介绍磁盘性能评估的方法,针对用户态驱动Kernel与SPDK中各种IO测试工具的使用方法做出总结。其中fio是一个常用的IO测试工具,可以运行在Linux、Windows等多种系统之上,可以用来测试本地磁盘、网络存储等的性能。为了和SPDK的fio工具相…

两周掌握Vue3(四):计算属性、监听属性、事件处理

文章目录 一、计算属性1.什么是计算属性2.代码示例 二、监听属性三、事件处理 代码仓库:跳转 当前分支:04 一、计算属性 1.什么是计算属性 Vue 中的计算属性具有以下作用: 数据处理:计算属性可以用于对数据进行处理和计算&…

医院患者满意度抽样方法

医院患者满意度调查的抽样方法是选择一部分患者,代表整体患者群体,以便获取可靠的数据,同时降低成本和时间开销。以下是一些医院患者满意度调查中常用的抽样方法: 简单随机抽样:这是一种最基本的抽样方法,…

格雷希尔G65系列快速接头满足汽车减震器的气压、油压测试要求

当汽车经过不平路面时,汽车减震器可以抑制弹簧吸震后因反弹带来的震荡和来自路面的冲击,为乘客带来平稳舒适的行车体验。减震器在出厂之前,需要模拟汽车的真实行驶环境,在模拟当中需要对它们进行气压和油压的轮番测试。 客户的测试…

ssm基于java web的防疫工作志愿者服务平台的设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本防疫工作志愿者服务平台就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数…

PHP短链接url还原成长链接

在开发过程中,碰到了需要校验用户回填的短链接是不是系统所需要的,于是就需要还原找出短链接所对应的长链接。 长链接转短链接 在百度上搜索程序员,跳转页面后的url就是一个长链接。当然你可以从任何地方复制一个长链接过来。 长链接 http…

代码随想录 字符串

344.反转字符串 344. 反转字符串 简单 提示 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1&#xff1a…

解析七人拼团,一人出局:社交电商的新玩法

每天五分钟讲解一个电商模式,大家好我是模式策划啊浩Zeropan_HH 在当今的社交电商时代,各种创新的营销策略层出不穷。其中,“七人拼团,一人出局”的玩法在近年来逐渐崭露头角,成为一种颇受欢迎的营销模式。那么&#…