dnsperf测试dns性能
dnsperf测试dns性能
dnsperf和resperf是由Nominum/Akamai(2006-2018年)和DNS-OARC(自2019年起)开发的免费工具,这些工具可以简化获取域名服务(DNS)精确延迟和吞吐量指标的过程。这些工具易于使用,能够模拟典型的互联网场景,因此网络运营商可以基准测试他们的命名和寻址基础设施,并为升级做好规划。最新版本的dnsperf和resperf支持包含IPv6查询的测试文件。
dnsperf会自行调整DNS查询负载以模拟网络条件。dnsperf中的新功能提高了延迟测量的精度,并允许每个数据包进行单独的查询延迟报告。dnsperf现在支持多线程,可以在多核系统中支持多个dnsperf客户端(每个客户端需要两个核心)。dnsperf的输出也进行了改进,使其更加简洁和实用。延迟数据可以用于生成详细的图表,使网络运营商更容易利用这些数据。
resperf会系统地增加查询速率,并监控响应速率,以模拟缓存的DNS服务。
命令手册页面:参见dnsperf(1)和resperf(1)。
更多信息见下面网页:https://www.dns-oarc.net/tools/dnsperf
仓库地址:https://github.com/DNS-OARC/dnsperf
dnsperf
和resperf
读取描述DNS查询的输入文件,并将这些查询发送到DNS服务器以测量性能。
1. 依赖
dnsperf 除了需要一个正常的C编译环境(包括autoconf、automake、libtool和pkgconfig)外,还需要以下几个库:
- OpenSSL - 用于支持TSIG
- Concurrency Kit - 用于原子操作
- LDNS - 可选,用于支持动态更新
- nghttp2 - 用于通过HTTP/2支持DNS-over-HTTPS
Debian/Ubuntu下安装依赖:
sudo apt-get install build-essential
sudo apt-get install -y autoconf automake libtool
sudo apt-get install -y libssl-dev libldns-dev libck-dev libnghttp2-dev
CentOS7下安装依赖(确保启用了EPEL仓库):
sudo yum install epel-release -y
sudo yum groupinstall 'Development Tools'
sudo yum install -y autoconf automake libtool pkgconfig
sudo yum install -y openssl-devel ldns-devel ck-devel libnghttp2-devel
2. 安装dnsperf
支持包管理器、源码安装等方式。
2.1 包管理器安装
CentOS7下安装:
sudo yum install epel-release -y
sudo yum install dnsperf -y
2.2 从源码编译安装
源码下载地址:https://www.dns-oarc.net/tools/dnsperf
tar zxvf dnsperf-version.tar.gz
cd dnsperf-version
./configure [options]
make
make install
2.3 从git仓库编译构建
git clone https://github.com/DNS-OARC/dnsperf.git
cd dnsperf
./autogen.sh
./configure [options]
make
make install
3. 使用dnsperf进行测试
dnsperf
的基本命令格式如下:
dnsperf -s <server_ip> -d <query_file> -Q <max_qps>
-s <server_ip>
: 指定要测试的DNS服务器的IP地址。-d <query_file>
: 指定包含DNS查询列表的文件。-Q <max_qps>
: 限制每秒查询数(QPS),可以不指定,表示不限制。
准备一个查询文件:
cat <<EOF >queries.txt
baidu.com A
www.baidu.com A
mail.baidu.com A
github.com A
www.yahoo.com A
www.microsoft.com A
www.aliyun.com A
developer.aliyun.com A
kubernetes.io A
kubernetes A
kubernetes.default.svc.cluster.local A
coredns.kube-system.svc.cluster.local A
EOF
示例1:基本测试
假设你有一个DNS服务器的IP地址为192.168.1.100
,查询文件为queries.txt
,可以通过以下命令进行测试:
dnsperf -s 192.168.1.100 -d queries.txt
该命令将对192.168.1.100
进行查询压力测试,使用queries.txt
中的查询列表,并且不限制QPS。
示例2:限制QPS的测试
如果你希望限制每秒查询数为1000 QPS,可以使用以下命令:
dnsperf -s 192.168.1.100 -d queries.txt -Q 1000
这会将测试的负载限制在1000 QPS。
示例3:运行特定时间的测试
dnsperf
默认会持续运行测试直到所有查询完成。你可以使用-l
参数指定测试持续的时间(以秒为单位),例如运行60秒:
dnsperf -s 192.168.1.100 -d queries.txt -l 60
4. 测试结果分析
运行dnsperf
后,你会得到如下的输出:
Statistics:
Queries sent: 100000
Queries completed: 100000
Queries lost: 0
Response codes: NOERROR 100000
Average Latency: 20.2 ms
Peak QPS: 4000
Average QPS: 3333.33
- Queries sent: 发送的查询数。
- Queries completed: 成功完成的查询数。
- Queries lost: 丢失的查询数。
- Response codes: 返回的响应码统计(例如NOERROR)。
- Average Latency: 平均延迟(毫秒)。
- Peak QPS: 峰值QPS。
- Average QPS: 平均QPS。
通过这些数据,可以分析DNS服务器的性能,包括在高负载下的响应能力和查询成功率。