DNS压测工具-dnsperf的安装和使用(centos)

系统调优

系统调优脚本,保存为sh文件,chmod提权后执行即可

bash 复制代码
#!/bin/sh
#系统全局允许分配的最大文件句柄数:
sysctl -w fs.file-max=2097152
sysctl -w fs.nr_open=2097152
echo 2097152 > /proc/sys/fs/nr_open
#允许当前会话 / 进程打开文件句柄数:
ulimit -n 1048576
#持久化 'fs.file-max' 设置到 /etc/sysctl.conf 文件:
FIND_FILE_SYSCTL="/etc/sysctl.conf"
FIND_STR_FS="fs.file-max"
if [ `grep -c "$FIND_STR_FS" $FIND_FILE_SYSCTL` -ne '0' ];then
    echo "已存在fs.file-max配置,开始修改"
    sed -i '/fs.file-max/d' /etc/sysctl.conf
    echo fs.file-max = 10485761 >> /etc/sysctl.conf
    echo "fs.file-max配置,修改完成"

else 
    echo "不存在fs.file-max配置,开始写入"
    echo fs.file-max = 10485761 >> /etc/sysctl.conf
    echo "fs.file-max配置,写入完成"
fi
#/etc/systemd/system.conf 设置服务最大文件句柄数:
FIND_FILE_SYSTEM="/etc/systemd/system.conf"
FIND_STR_1="DefaultLimitNOFILE"
if [ `grep -c "$FIND_STR_1" $FIND_FILE_SYSTEM` -ne '0' ];then
    echo "已存在DefaultLimitNOFILE配置,开始修改"
    sed -i '/DefaultLimitNOFILE/d' /etc/systemd/system.conf
    echo DefaultLimitNOFILE=1048576 >> /etc/systemd/system.conf
    echo "DefaultLimitNOFILE配置,修改完成"
else
    echo "不存在DefaultLimitNOFILE配置,开始写入"
    echo DefaultLimitNOFILE=1048576 >> /etc/systemd/system.conf
    echo "DefaultLimitNOFILE配置,写入完成"
fi

#/etc/security/limits.conf 持久化设置允许用户 / 进程打开文件句柄数:
#*      soft   nofile      1048576
#*      hard   nofile      1048576
FIND_FILE_LIMITS="/etc/security/limits.conf"
FIND_STR_SOFT="* soft nofile "
FIND_STR_HARD="* hard nofile"
if [ `grep -c "$FIND_STR_SOFT" $FIND_FILE_LIMITS` -ne '0' ];then
    echo "已存在soft_nofile配置,开始修改"
    sed -i '/* soft nofile /d' /etc/security/limits.conf
    echo '* soft nofile 1048576' >> /etc/security/limits.conf
    echo "soft_nofile配置,修改完成"
else
    echo "不存在soft_nofile配置,开始写入"
    echo '* soft nofile 1048576' >> /etc/security/limits.conf
    echo "soft_nofile配置,写入完成"
fi

if [ `grep -c "$FIND_STR_HARD" $FIND_FILE_LIMITS` -ne '0' ];then
    echo "已存在hard_nofile配置,开始修改"
    sed -i '/* hard nofile/d' /etc/security/limits.conf
    echo '* hard nofile 1048576' >> /etc/security/limits.conf
    echo "hard_nofile配置,修改完成"
else
    echo "不存在hard_nofile配置,开始写入"
    echo '* hard nofile 1048576' >> /etc/security/limits.conf
    echo "hard_nofile配置,写入完成"
fi

#TCP 协议栈网络参数
#并发连接 backlog 设置:
sysctl -w net.core.somaxconn=32768
sysctl -w net.ipv4.tcp_max_syn_backlog=16384
sysctl -w net.core.netdev_max_backlog=16384
#可用知名端口范围:
sysctl -w net.ipv4.ip_local_port_range='1000 65535'
#TCP Socket 读写 Buffer 设置:
sysctl -w net.core.rmem_default=262144
sysctl -w net.core.wmem_default=262144
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
sysctl -w net.core.optmem_max=16777216
#sysctl -w net.ipv4.tcp_mem='16777216 16777216 16777216'
sysctl -w net.ipv4.tcp_rmem='1024 4096 16777216'
sysctl -w net.ipv4.tcp_wmem='1024 4096 16777216'

#TCP 连接追踪设置:
sysctl -w net.ipv4.tcp_max_tw_buckets=1048576
sysctl -w net.ipv4.tcp_fin_timeout=15
sysctl -w net.ipv4.ip_local_port_range="500 65535"

echo 1000000 >> /proc/sys/fs/nr_open
ulimit -n 100000

echo "系统优化完成!!!"```

安装

安装dnsperf依赖ck和nghttp2,所以要先安装这两个应用

1、安装ck

bash 复制代码
wget https://github.com/concurrencykit/ck/archive/0.6.0.tar.gz
tar -zxvf ck-0.6.0.tar.gz 
cd ck-0.6.0
./configure 
make
make install

2、因为nghttp2依赖python3.8以上的环境,所以需要先安装python

bash 复制代码
wget https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tgz
#安装依赖
sudo yum install gcc openssl-devel bzip2-devel libffi-devel zlib-devel
 tar -zxvf Python-3.8.12.tgz 
 cd Python-3.8.12
 ./configure
 make
 make altinstall

3、安装nghttp2

bash 复制代码
`wget https://github.com/nghttp2/nghttp2/releases/download/v1.45.1/nghttp2-1.45.1.tar.gz`
#安装依赖
yum -y groupinstall "Development Tools"
yum -y install openssl-devel libxml2-devel libev-devel jemalloc-devel python-devel
tar -zxvf nghttp2-1.45.1.tar.gz 
cd nghttp2-1.45.1
./configure
make
make install

4、安装dnsperf

bash 复制代码
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
wget https://www.dns-oarc.net/files/dnsperf/dnsperf-2.13.0.tar.gz
tar -zxvf dnsperf-2.13.0.tar.gz
cd dnsperf-2.13.0
./configure --with-nghttp2=/usr/local --with-ssl --with-zlib
make
make install

至此,安装完毕

使用

使用前需要先准备一个dns配置文件,内容如下(例):

1、使用如下命令开始测试:

bash 复制代码
dnsperf -d dnstest.com.txt -s 10.38.248.218  -c 256 -Q 300000 -q 1000000 -l 10 -S 1

2、通过上图可知,被测试机A的QPS性能为116044

Dnsperf参数说明(常用参数):

-d :指定datafile的域名数据进行读取,进行压力测试

-s : 指定被测试的机器

-l :指定测试的时间

-c:指定并发探测数

2.所有参数:

-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 打印帮助

相关推荐
石牌桥网管7 小时前
DNS Resolver解析服务器出口IP查询
运维·网络·tcp/ip·dns
牧魂.1 天前
软件测试入职要求汇总
自动化测试·软件测试·功能测试·接口测试·性能测试
火山引擎边缘云3 天前
QCon演讲实录|赵彦奇:HTTPDNS 边缘下沉,性能、成本和稳定性之间的取舍与思考
http·边缘计算·dns
CXDNW3 天前
【网络面试篇】其他面试题——Cookie、Session、DNS、CDN、SSL/TLS、加密概念
网络·笔记·面试·cdn·dns·cookie
桃酥4033 天前
day08|计算机网络重难点之 DNS查询过程、CDN是什么,有什么作用?、Cookie和Session是什么?有什么区别?
计算机网络·cdn·dns·cookie·session
Coding测试4 天前
Jmeter并发线程场景下共享变量错乱问题解决
性能测试
UestcXiye4 天前
《TCP/IP网络编程》学习笔记 | Chapter 8:域名及网络地址
c++·计算机网络·ip·tcp·dns
小码哥说测试6 天前
编写第一个 Appium 测试脚本:从安装到运行!
软件测试·测试工具·职场和发展·单元测试·appium·postman·性能测试
十叶知秋7 天前
【jmeter】jmeter的线程组功能的详细介绍
数据库·jmeter·性能测试
qq_4337169510 天前
性能测试 —— MySQL性能测试方案设计!
自动化测试·功能测试·测试工具·mysql·接口测试·postman·性能测试