系统调优

系统调优脚本,保存为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 "系统优化完成!!!"```

安装

安装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-devel

tar -zxvf Python-3.8.12.tgz

cd Python-3.8.12

./configure

make

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

相关文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。