在linux tcp方面有什么调优经验或案例的,谁有资料或者整理过的,分享下哈?

在linux tcp方面有什么调优经验或案例的,谁有资料或者整理过的,分享下哈

参与12

2同行回答

zhaoxiaoyong081zhaoxiaoyong081资深工程师平安科技
TCP 优化,分三类情况详细说明第一类,在请求数比较大的场景下,你可能会看到大量处于 TIME_WAIT 状态的连接,它们会占用大量内存和端口资源。这时,我们可以优化与 TIME_WAIT 状态相关的内核选项,比如采取下面几种措施。增大处于 TIME_WAIT 状态的连接数量 net.ipv4.tcp_max_tw_bu...显示全部

TCP 优化,分三类情况详细说明

第一类,在请求数比较大的场景下,你可能会看到大量处于 TIME_WAIT 状态的连接,它们会占用大量内存和端口资源。这时,我们可以优化与 TIME_WAIT 状态相关的内核选项,比如采取下面几种措施。

增大处于 TIME_WAIT 状态的连接数量 net.ipv4.tcp_max_tw_buckets ,并增大连接跟踪表的大小 net.netfilter.nf_conntrack_max。

减小 net.ipv4.tcp_fin_timeout 和 net.netfilter.nf_conntrack_tcp_timeout_time_wait ,让系统尽快释放它们所占用的资源。

开启端口复用 net.ipv4.tcp_tw_reuse。这样,被 TIME_WAIT 状态占用的端口,还能用到新建的连接中。

增大本地端口的范围 net.ipv4.ip_local_port_range 。这样就可以支持更多连接,提高整体的并发能力。

增加最大文件描述符的数量。你可以使用 fs.nr_open 和 fs.file-max ,分别增大进程和系统的最大文件描述符数;或在应用程序的 systemd 配置文件中,配置 LimitNOFILE ,设置应用程序的最大文件描述符数。

第二类,为了缓解 SYN FLOOD 等,利用 TCP 协议特点进行攻击而引发的性能问题,你可以考虑优化与 SYN 状态相关的内核选项,比如采取下面几种措施。

增大 TCP 半连接的最大数量 net.ipv4.tcp_max_syn_backlog ,或者开启 TCP SYN Cookies net.ipv4.tcp_syncookies ,来绕开半连接数量限制的问题(注意,这两个选项不可同时使用)。

减少 SYN_RECV 状态的连接重传 SYN+ACK 包的次数 net.ipv4.tcp_synack_retries。

第三类,在长连接的场景中,通常使用 Keepalive 来检测 TCP 连接的状态,以便对端连接断开后,可以自动回收。但是,系统默认的 Keepalive 探测间隔和重试次数,一般都无法满足应用程序的性能要求。所以,这时候你需要优化与 Keepalive 相关的内核选项,比如:

缩短最后一次数据包到 Keepalive 探测包的间隔时间 net.ipv4.tcp_keepalive_time;

缩短发送 Keepalive 探测包的间隔时间 net.ipv4.tcp_keepalive_intvl;

减少 Keepalive 探测失败后,一直到通知应用程序前的重试次数 net.ipv4.tcp_keepalive_probes。

收起
保险 · 2023-06-13
浏览446
zhanxuechaozhanxuechao咨询专家数字研究院
centos7-os-init.sh#!/bin/sh # Name:centos7-os-init.sh # Write by:Jan # Last Modify:2019-09-20 # DESC:Linux系统优化和安全加固 # CMD:sh centos7-os-init.sh # CMD说明:该脚本主要用于centos调优,作为相对通用的模板,有一定的普适性,但是一般在实际生产环境 ########...显示全部

centos7-os-init.sh

#!/bin/sh
# Name:centos7-os-init.sh
# Write by:Jan
# Last Modify:2019-09-20
# DESC:Linux系统优化和安全加固
# CMD:sh centos7-os-init.sh
# CMD说明:该脚本主要用于centos调优,作为相对通用的模板,有一定的普适性,但是一般在实际生产环境
##########中会根据系统的不同功能,进行不同的参数优化,请各位注意。
#--------------------------------------------------------------------
#0 添加epel的yum源
##echo "[epel]                                                     " >> /etc/yum.repos.d/epel.repo
##echo "name=Extra Packages for Centos 7 - \\$basearch              " >> /etc/yum.repos.d/epel.repo
##echo "baseurl=http://centos.ustc.edu.cn/epel/7Server/\\$basearch  " >> /etc/yum.repos.d/epel.repo
##echo "failovermethod=priority                                    " >> /etc/yum.repos.d/epel.repo
##echo "enabled=1                                                  " >> /etc/yum.repos.d/epel.repo
##echo "gpgcheck=0                                                 " >> /etc/yum.repos.d/epel.repo
###使配置生效
##yum clean all
##yum makecache
##yum repolist
yum install -y wget
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
yum repolist
##或者直接安装 rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm 
#1 设定时区,自动同步时间,定义为每天自动同步一次
yum install -y ntpdate
\\cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ntp_path=`which ntpdate`
$ntp_path 172.16.2.89
hwclock -w
echo "10 1 * * * $ntp_path 172.16.2.89" >> /var/spool/cron/root
#设置hostname,一般安装的时候就会设置好

#2 创建系统默认目录:
##脚本存放目录
mkdir -p /u01/shell
##软件安装介质存放位置
mkdir -p /u01/src
##日志存放位置
mkdir -p /u02/log 
##备份存放位置,一般也会挂载nas存储盘
mkdir -p /u03/bak
mkdir -p /u03/nas
#mount -t cifs -o username="jan",password="123456a?" //172.16.2.78/DB_bak /u03/nas

#3 优化内核参数
##3.1 修改最大系统最大打开文件数和最大进程数。
echo "* soft nproc 65536   ">>/etc/security/limits.conf
echo "* hard nproc 65536  ">>/etc/security/limits.conf 
echo "* soft nofile 65536  ">>/etc/security/limits.conf 
echo "* hard nofile 65536 ">>/etc/security/limits.conf
echo "*          soft    nproc     65536">/etc/security/limits.d/20-nproc.conf
echo "root       soft    nproc     unlimited">>/etc/security/limits.d/20-nproc.conf

echo "测试方式:当前session退出后重新登录执行:ulimit -Sn ulimit -Hn"
##3.2 调整内核参数、网络参数、安全参数以应对高并发环境。
cp /etc/sysctl.conf /etc/sysctl.conf.bk
echo ''>/etc/sysctl.conf

#关闭ipv6
echo "net.ipv6.conf.all.disable_ipv6 = 1">>/etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1">>/etc/sysctl.conf
# 避免放大攻击
echo "net.ipv4.icmp_echo_ignore_broadcasts = 1">>/etc/sysctl.conf
# 开启恶意icmp错误消息保护
echo "net.ipv4.icmp_ignore_bogus_error_responses = 1">>/etc/sysctl.conf
#关闭路由转发
echo "net.ipv4.ip_forward = 0">>/etc/sysctl.conf
echo "net.ipv4.conf.all.send_redirects = 0">>/etc/sysctl.conf
echo "net.ipv4.conf.default.send_redirects = 0">>/etc/sysctl.conf
#开启反向路径过滤
echo "net.ipv4.conf.all.rp_filter = 1">>/etc/sysctl.conf
echo "net.ipv4.conf.default.rp_filter = 1">>/etc/sysctl.conf
#处理无源路由的包
echo "net.ipv4.conf.all.accept_source_route = 0">>/etc/sysctl.conf
echo "net.ipv4.conf.default.accept_source_route = 0">>/etc/sysctl.conf
#关闭sysrq功能
echo "kernel.sysrq = 0">>/etc/sysctl.conf
#core文件名中添加pid作为扩展名
echo "kernel.core_uses_pid = 1">>/etc/sysctl.conf
# 开启SYN洪水攻击保护
echo "net.ipv4.tcp_syncookies = 1">>/etc/sysctl.conf
#修改消息队列长度
echo "kernel.msgmnb = 65536">>/etc/sysctl.conf
echo "kernel.msgmax = 65536">>/etc/sysctl.conf
#设置最大内存共享段大小bytes,这两个参数主要在安装oracle数据库的时候,结合SGA使用
echo "kernel.shmmax = 17179869184">>/etc/sysctl.conf #建议修改为内存大小例如16G内存
echo "kernel.shmall = 4194304">>/etc/sysctl.conf #默认=kernel.shmmax/4KB(4096)
#timewait的数量,默认180000
echo "net.ipv4.tcp_max_tw_buckets = 6000">>/etc/sysctl.conf
echo "net.ipv4.tcp_sack = 1">>/etc/sysctl.conf
echo "net.ipv4.tcp_window_scaling = 1">>/etc/sysctl.conf
echo "net.ipv4.tcp_rmem = 4096 87380 4194304">>/etc/sysctl.conf
echo "net.ipv4.tcp_wmem = 4096 16384 4194304">>/etc/sysctl.conf
echo "net.core.wmem_default = 8388608">>/etc/sysctl.conf
echo "net.core.rmem_default = 8388608">>/etc/sysctl.conf
echo "net.core.rmem_max = 16777216">>/etc/sysctl.conf
echo "net.core.wmem_max = 16777216">>/etc/sysctl.conf
#每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
echo "net.core.netdev_max_backlog = 262144">>/etc/sysctl.conf
#限制仅仅是为了防止简单的DoS 攻击
echo "net.ipv4.tcp_max_orphans = 3276800">>/etc/sysctl.conf
#未收到客户端确认信息的连接请求的最大值
echo "net.ipv4.tcp_max_syn_backlog = 262144">>/etc/sysctl.conf
echo "net.ipv4.tcp_timestamps = 0">>/etc/sysctl.conf
#内核放弃建立连接之前发送SYNACK 包的数量
echo "net.ipv4.tcp_synack_retries = 1">>/etc/sysctl.conf
#内核放弃建立连接之前发送SYN 包的数量
echo "net.ipv4.tcp_syn_retries = 1">>/etc/sysctl.conf
#启用timewait 快速回收
echo "net.ipv4.tcp_tw_recycle = 1">>/etc/sysctl.conf
#开启重用。允许将TIME-WAIT sockets 重新用于新的TCP 连接
echo "net.ipv4.tcp_tw_reuse = 1">>/etc/sysctl.conf
echo "net.ipv4.tcp_mem = 94500000 915000000 927000000">>/etc/sysctl.conf
echo "net.ipv4.tcp_fin_timeout = 1">>/etc/sysctl.conf
#当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2 小时
echo "net.ipv4.tcp_keepalive_time = 30">>/etc/sysctl.conf
#允许系统打开的端口范围
echo "net.ipv4.ip_local_port_range = 32768 65000">>/etc/sysctl.conf
#修改防火墙表大小,默认65536
#net.netfilter.nf_conntrack_max=655350
#net.netfilter.nf_conntrack_tcp_timeout_established=1200
# 确保无人能修改路由表
echo "net.ipv4.conf.all.accept_redirects = 0">>/etc/sysctl.conf
echo "net.ipv4.conf.default.accept_redirects = 0">>/etc/sysctl.conf
echo "net.ipv4.conf.all.secure_redirects = 0">>/etc/sysctl.conf
echo "net.ipv4.conf.default.secure_redirects = 0">>/etc/sysctl.conf
# 开启并记录欺骗,源路由和重定向包
echo "net.ipv4.conf.all.log_martians = 1               ">>/etc/sysctl.conf
echo "net.ipv4.conf.default.log_martians = 1           ">>/etc/sysctl.conf
echo "fs.file-max = 6815744                            ">>/etc/sysctl.conf
echo "fs.aio-max-nr = 1048576                          ">>/etc/sysctl.conf
echo "kernel.shmmni = 4096                             ">>/etc/sysctl.conf
echo "kernel.sem = 250 32000 100 128                   ">>/etc/sysctl.conf
echo "net.ipv4.route.gc_timeout=100                    ">>/etc/sysctl.conf

#启用内核中的SYN cookie保护:(一般情况下操作系统已经默认开启)
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
#优化swap
echo "vm.swappiness=10">>/etc/sysctl.conf
sysctl -p

#4 安全加固相关:
#4.1 关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

#4.2 关闭不常用服务。根据服务器的用途和安装系统时候的选择进行优化,将不必要的服务关闭,提高性能。
#chkconfig iptables             off
#chkconfig ip6tables          off
#chkconfig abrt-ccpp          off
#chkconfig abrtd              off
#chkconfig acpid              off
#chkconfig atd                off
#chkconfig auditd             off
#chkconfig autofs             off
#chkconfig blk-availability  off
#chkconfig bluetooth          off
#chkconfig certmonger         off
#chkconfig cpuspeed           off
#chkconfig cups               off
#chkconfig dnsmasq            off
#chkconfig firstboot          off
#chkconfig kdump              off
#chkconfig mdmonitor          off
#chkconfig netconsole         off
#chkconfig postfix            off
#chkconfig quota_nld          off
#chkconfig rdisc              off
#chkconfig restorecond       off     
#chkconfig saslauthd          off
#chkconfig smartd             off
#chkconfig wpa_supplicant    off
#chkconfig ypbind            off

#4.3 安装监控客户端
##安装监控客户端

#4.4 清除不必要的系统帐户
userdel adm
userdel lp
userdel sync
userdel shutdown
userdel halt
userdel operator
userdel ftp

#4.5 隐藏linux版本号
#>/etc/issue
#>/etc/issue.net

#4.6 系统关闭Ping
#关闭ping,使系统对ping不做反应,对网络安全大有好处。
#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
#echo "echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all" >> /etc/rc.d/rc.local
#恢复系统的Ping响应:
#echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

###4.7 升级OpenSSH OpenSSL至安全版本
#######禁止root账户远程登录,更改ssh端口
##sed -i 's/#Port 22/Port 2022/g' /etc/ssh/sshd_config
##sed -i 's/#PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config

#4.8 安装telnet
yum install -y telnet

###4.9 创建普通用户,指定/u01 u02 u03所属
##groupadd gapp
##useradd  -g gapp appuser
##echo "apuserPWD" | passwd --stdin appuser
##chown -R appuser.gapp /u01
##chown -R appuser.gapp /u02
##chown -R appuser.gapp /u03
##chown -R appuser.gapp /etc/rc.local
##chown -R appuser.gapp /etc/rc.d/rc.local
##chown -R appuser.gapp /etc/profile 
##chown -R appuser.gapp /var/spool/cron
##chown -R root.root /var/spool/cron/root
###4.10 锁定关键文件系统禁止被修改
##chattr +i /etc/passwd
##chattr +i /etc/inittab
##chattr +i /etc/group
##chattr +i /etc/shadow
##chattr +i /etc/gshadow
##chattr +a /var/log/messages
###使用chattr命令后,为了安全我们需要将其改名
##mv /usr/bin/chattr /usr/bin/lockkeyfile

#4.11 history命令加入时间和操作者IP的属性
#echo "HISTFILESIZE=4000">>/etc/profile  
#echo "HISTSIZE=4000">>/etc/profile  
#echo 'HISTTIMEFORMAT="%F %T  `who am i|cut -d\\( -f2|cut -d\\) -f1` `whoami` "'>>/etc/profile  
#echo "export HISTTIMEFORMAT">>/etc/profile
echo "
HISTFILESIZE=4000
HISTSIZE=4000 
HISTTIMEFORMAT=\\"%F %T  \\`who am i|cut -d\\( -f2|cut -d\\) -f1\\` \\`whoami\\` \\"
export HISTTIMEFORMAT
">>/etc/profile
source /etc/profile
systemctl stop firewalld.service
systemctl disable firewalld.service
#5 系统重启
yum install -y gcc
reboot

收起
IT咨询服务 · 2023-06-09
  • 系统基线规范,厉害了!有很多地方可以参考,不知道有没有细化应用场景的,比如前中后端区分,或者联机/批处理区分等等,因为有很多场景和标准基线冲突或不符,这块是坚持基线还是各个软件最佳事件呢
    2023-06-09
  • [此评论已删除]
    2023-06-09

ChatGPT 回答

在银行行业中,Linux系统的TCP调优是非常重要的一项工作,可以提高系统的网络性能和稳定性。以下是一些常见的Linux TCP调优经验和案例:

  1. 调整TCP缓冲区大小:可以通过修改TCP缓冲区大小来提高网络性能。可以使用sysctl命令或修改/proc/sys/net/core/rmem_max、/proc/sys/net/core/wmem_max等文件来调整TCP缓冲区大小。
  2. 开启TCP窗口缩放:TCP窗口缩放可以提高网络吞吐量和传输速度。可以通过修改/proc/sys/net/ipv4/tcp_window_scaling文件来开启TCP窗口缩放。
  3. 调整TCP连接超时时间:可以通过调整TCP连接超时时间来提高网络稳定性。可以使用sysctl命令或修改/proc/sys/net/ipv4/tcp_keepalive_time等文件来调整TCP连接超时时间。
  4. 开启TCP快速重传:TCP快速重传可以提高网络传输速度和稳定性。可以通过修改/proc/sys/net/ipv4/tcp_fastopen等文件来开启TCP快速重传。
  5. 调整TCP拥塞控制算法:可以根据网络环境和应用场景选择合适的TCP拥塞控制算法,如CUBIC、BIC、Reno等。可以使用sysctl命令或修改/proc/sys/net/ipv4/tcp_congestion_control等文件来调整TCP拥塞控制算法。

以上是一些常见的Linux TCP调优经验和案例,可以根据实际情况进行调整和优化。同时,也可以参考Linux内核文档和网络性能优化相关的书籍和资料来深入了解Linux TCP调优。

提问者

三虎
系统运维工程师中国邮政储蓄银行
擅长领域: 服务器信创Linux

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2023-06-09
  • 关注会员:3 人
  • 问题浏览:1292
  • 最近回答:2023-06-13
  • X社区推广