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


    系统调优

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

    #!/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 "系统优化完成!!!"```
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89

    安装

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

    1、安装ck

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3、安装nghttp2

    `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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    4、安装dnsperf

    
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    至此,安装完毕

    使用

    使用前需要先准备一个dns配置文件,内容如下(例):
    在这里插入图片描述

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

    dnsperf -d dnstest.com.txt -s 10.38.248.218  -c 256 -Q 300000 -q 1000000 -l 10 -S 1
    
    • 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 打印帮助

  • 相关阅读:
    防止非法盗链的几种解决方案
    不敲代码就能搭建个人博客?快解析内网穿透来助力
    【Quark RISC-V】流水线CPU设计(1)流水线概述
    移动通信基础(14)均衡
    paddlepaddle
    为什么说,网络安全工程师是网安行业的天花板?
    AxureRP制作静态站点发布互联网,实现公网访问【内网穿透】
    (附源码)计算机毕业设计SSM洁强汽车美容
    汇编语言访问寄存器和内存篇---02
    08Maven中的继承和聚合的作用
  • 原文地址:https://blog.csdn.net/weixin_41853064/article/details/133909967