1、dnsperf简介
DNSPerf(DNS Performance)来自Prospect One公司,刚好最近研究 DNS 又想起这项服务。DNSPerf 从全世界超过两百个城市节点来检测各个 DNS 速度、反应时间及上线率(Uptime),除此之外,DNSPerf 还有针对一般使用者会用到的开放式 DNS 解析服务(Public DNS)进行监测记录,比较令我感到意外的是解析速度方面OpenDNS居然还比Google DNS来得更快!有兴趣的朋友可以到 DNSPerf 看看测试结果,对于读者来说还是蛮有参考价值的。dnsperf目前的实现是单进程模式,通过epoll非阻塞地处理网络事件。
2、安装程序
[root@docker-03 ~]# yum install dnsperf
3、参数详解
## Dnsperf 支持下面的这些命令行参数: -s 用来指定DNS服务器的IP地址,默认值是127.0.0.1 -p 用来指定DNS服务器的端口,默认值是53 -d 用来指定DNS消息的内容文件,该文件中包含要探测的域名和资源记录类型,见下文 -t 用来指定每个请求的超时时间,默认值是3000ms -Q 用来指定本次压测的最大请求数,默认值是1000 -c 用来指定并发探测数,默认值是100. dnsperf会从-d指定的文件中随机选取100个座位探测域名来发送DNS请求 -l 用来指定本次压测的时间,默认值是无穷大 -e 本选项通过EDNS0,在OPT资源记录中运用edns-client-subnet来指定真实的client ip -i 用来指定前后探测的时间间隔,因为dnsperf是一个压测工具,所以本选项目前还不支持 -P 指定用哪个传输层协议发送DNS请求,udp或者tcp。默认值是udp -f 指定用什么地址类型发送DNS请求,inet或者inet6。默认值是inet -v 除了标准的输出外,还输出每个相应码的个数 -h 打印帮助
4、数据文件示例
-d选项指定数据文件名,数据文件示例如下,测试的次数和域名拷贝次数要一样:
# This is a comment and is ommited # The columns after column 2 will be ommited if one line contains more than 3 colums. www.app1.com A
数据文件中以“#”开头的行被认为是注释行,会被dnsperf忽略。
其中有效数据由两列组成,第一列是查询域名,第二列是查询的资源类型,dnsperf支持的资源类型如下:
A
,NS
,MD
,MF
,CNAME
,SOA
,MB
,MG
,MR
,NULL
,WKS
,PTR
,HINFO
,MINFO
,MX
,TXT
,AAAA
,SRV
,NAPTR
,A6
,ASFR
,MAILB
,MAILA
,ANY
5、性能评测指标
[root@RedHat_test opt]# dnsperf -c 1000 -d testfile -s 172.17.0.98 DNS Performance Testing Tool Version 2.3.2 [Status] Command line: dnsperf -c1000-dtestfile -s172.17.0.98 [Status] Sending queries (to 172.17.0.98) [Status] Started at: Wed Jan 1515:34:50 2020 [Status] Stopping after 1run through file [Status] Testing complete (end of file) Statistics: Queries sent: 325336 Queries completed: 325336(100.00%) Queries lost: 0(0.00%) Response codes: NOERROR 325336(100.00%) Average packet size: request 29, response 75 Run time (s): 3.624032 Queries per second: 89771.834244 Average Latency (s): 0.000990 (min 0.000335, max 0.016325) Latency StdDev (s): 0.000441
1、queryperf简介
在bind中,有一款自带的压力测试软件,queryperf。使用这款软件可以对DNS服务器作请求测试,并且使用方法简单,我们可以使用queryperf测试多次,取一个平均值,这样就算结果不准确,也不会和实际情况相差太大。
2、安装程序
[root@docker-03 ~]# cd /usr/local/src [root@docker-03 src]# wget http://ftp.isc.org/isc/bind9/9.12.1/bind-9.12.1.tar.gz [root@docker-03 src]# tar -zxvf bind-9.12.1.tar.gz [root@docker-03 queryperf]# cd /usr/local/src/bind-9.12.1/contrib/queryperf [root@docker-03 queryperf]# ./configure [root@docker-03 queryperf]# make [root@docker-03 queryperf]# cp queryperf /usr/bin
3、参数详解
## queryperf [-d datafile] [-s server_addr] [-p port] [-q num_queries] -d: 后面接上一个文件,文件的内容是用户对DNS的请求,一行为一条请求,所以为了测试,我们可以在里面写上几千几万条。 -s: DNS服务器地址 -p: DNS服务器端口 -q: 指定查询的输出的最大数量
4、sh批量生产记录
[root@docker-03 queryperf]# cat gen_record.sh #!/bin/sh #a_record="ns2.paiconf.com" a_record=$1 num=$2 file_path=$3 if[ ${a_record}-a${num}-a${file_path}]; then var=1 while[ $var-le${num}] do echo"${a_record}A ">> ${file_path} var=$(($var+ 1 )) done else echo"use: ./sh [a_record] [num] [file_path]" fi
5、使用方法
[root@docker-03 queryperf]# chmod -R 777 gen_record.sh [root@docker-03 queryperf]# ./gen_record.sh www.baidu.com 10000 dnstest.txt [root@docker-03 queryperf]# queryperf -d dnstest.txt -s 172.17.0.98 DNS Query Performance Testing Tool Version: $Id: queryperf.c,v 1.12 2007/09/05 07:36:04 marka Exp $ [Status] Processing input data [Status] Sending queries (beginning with 172.17.0.98) [Status] Testing complete Statistics: Parse input file: once Ended due to: reaching end of file Queries sent: 10000queries Queries completed: 10000queries Queries lost: 0queries Queries delayed(?): 0queries RTT max: 0.011268 sec RTT min: 0.000267 sec RTT average: 0.000417 sec RTT std deviation: 0.000466 sec RTT out of range: 0queries Percentage completed: 100.00% Percentage lost: 0.00% Started at: Wed Jan 1518:31:55 2020 Finished at: Wed Jan 1518:31:56 2020 Ran for: 0.226052 seconds Queries per second: 44237.609046 qps