系统调优
系统调优脚本,保存为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' ];thenecho "已存在fs.file-max配置,开始修改"sed -i '/fs.file-max/d' /etc/sysctl.confecho fs.file-max = 10485761 >> /etc/sysctl.confecho "fs.file-max配置,修改完成"else echo "不存在fs.file-max配置,开始写入"echo fs.file-max = 10485761 >> /etc/sysctl.confecho "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' ];thenecho "已存在DefaultLimitNOFILE配置,开始修改"sed -i '/DefaultLimitNOFILE/d' /etc/systemd/system.confecho DefaultLimitNOFILE=1048576 >> /etc/systemd/system.confecho "DefaultLimitNOFILE配置,修改完成"
elseecho "不存在DefaultLimitNOFILE配置,开始写入"echo DefaultLimitNOFILE=1048576 >> /etc/systemd/system.confecho "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' ];thenecho "已存在soft_nofile配置,开始修改"sed -i '/* soft nofile /d' /etc/security/limits.confecho '* soft nofile 1048576' >> /etc/security/limits.confecho "soft_nofile配置,修改完成"
elseecho "不存在soft_nofile配置,开始写入"echo '* soft nofile 1048576' >> /etc/security/limits.confecho "soft_nofile配置,写入完成"
fiif [ `grep -c "$FIND_STR_HARD" $FIND_FILE_LIMITS` -ne '0' ];thenecho "已存在hard_nofile配置,开始修改"sed -i '/* hard nofile/d' /etc/security/limits.confecho '* hard nofile 1048576' >> /etc/security/limits.confecho "hard_nofile配置,修改完成"
elseecho "不存在hard_nofile配置,开始写入"echo '* hard nofile 1048576' >> /etc/security/limits.confecho "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 100000echo "系统优化完成!!!"```
安装
安装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
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-develtar -zxvf Python-3.8.12.tgz cd Python-3.8.12./configuremakemake altinstall
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
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
至此,安装完毕
使用
使用前需要先准备一个dns配置文件,内容如下(例):
1、使用如下命令开始测试:
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 打印帮助