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

相关推荐
CXDNW2 小时前
【网络篇】计算机网络——应用层详述(笔记)
服务器·笔记·计算机网络·http·web·cdn·dns
zhangxueyi3 天前
详解DNS工作原理及实例分析
linux·运维·服务器·dns
会洗碗的CV工程师3 天前
828华为云征文|针对Flexus X实例云服务器的CPU和内存性能测评
运维·服务器·华为云·性能测试·模块测试
威迪斯特4 天前
linux网络服务:网络名称解析管理器,提供系统级的DNS缓存服务,并管理网络连接和DNS解析的服务systemd-resolved详解
linux·服务器·网络·缓存·dns·域名解析
歪桃7 天前
性能测试1初步使用Jmeter
jmeter·性能测试
cooldream20098 天前
828华为云征文 | 华为云X实例部署Docker应用的性能评测优化与实践指南
docker·容器·华为云·性能测试
weixin_408951358 天前
android和ios双端应用性能的测试工具
android·ios·性能优化·性能测试·测试覆盖率·帧率·安卓性能测试
MJH82711 天前
JMeter全流程性能测试实战!
自动化测试·功能测试·jmeter·单元测试·appium·性能测试·测试工程师
中草药z11 天前
【JavaEE】数据链路层协议和DNS
网络·学习·mac·ip·dns·mtu·数据链路
luofengmacheng12 天前
记一次域名解析的问题定位
dns·域名解析