公司建站比较好的,蔬菜派送网站怎么做,建个人网站要多少钱,网络目标市场营销策略简介
Linux 服务器在高并发场景下#xff0c;默认的内核参数无法利用现有硬件#xff0c;造成软件崩溃、卡顿、性能瓶颈。
当然#xff0c;修改参数只是让Linux更好软件的去利用已有的硬件资源#xff0c;如果硬件资源不够也无法解决问题的。而且当硬件资源不足的时候默认的内核参数无法利用现有硬件造成软件崩溃、卡顿、性能瓶颈。
当然修改参数只是让Linux更好软件的去利用已有的硬件资源如果硬件资源不够也无法解决问题的。而且当硬件资源不足的时候某些参数过大可能也会占用多余资源或者影响稳定性。 或者让单个进程占用过多资源影响整体系统的运行。
写本文的起因主要是对zabbix 服务器的高并发需求还有数据库、Nginx、ES集群的高并发需求。 博客https://songxwn.com 注意
在/etc/sysctl.conf 修改的可以使用sysctl -p 立即生效使用sysctl -a 查看当前数值。
在/etc/security/limits.conf 修改的需要重启服务或系统才能生效或者用ulimit 单独去配置。
最大文件打开句柄数量 - max open files
Linux 下一切皆文件一般如果遇到文件句柄达到上限时会碰到Too many open files或者Socket/File: Can’t open so many files等错误。
在 linux 中每个连接都会占用一个文件句柄所以句柄数量限制同样也会限制最大连接数 对于像 Nginx 这样的反向代理对于每个请求它会与 client 和 upstream server 分别建立一个连接即占据两个文件句柄所以理论上来说 Nginx 能同时处理的连接数最多是系统最大文件句柄数限制的一半。
lsof | wc -l
# 可以查看当前打开文件的数量系统级和进程级限制、异步 I/O 操作的最大数目
vim /etc/sysctl.conf
fs.file-max 9223372036854775807
fs.nr_open 1073741816
fs.aio-max-nr 1048576
sysctl -p
# 应用
cat /proc/sys/fs/file-max
# 查看实时用户级限制
vim /etc/security/limits.conf
* soft nofile 1024000
* hard nofile 1024000
ulimit -a
# 需要重启生效Systemd限制
vim /etc/systemd/system.confDefaultLimitCOREinfinity
DefaultLimitNOFILE1024000
DefaultLimitNPROC1024000vim /etc/systemd/user.confDefaultLimitCOREinfinity
DefaultLimitNOFILE1024000
DefaultLimitNPROC1024000systemctl daemon-reload# 最终还需要重启服务。
消息队列大小 vim /etc/sysctl.conf
kernel.msgmnb 65536
# 单个消息队列中单个消息的最大允许大小以字节为单位
kernel.msgmax 65536
# 用于指定从一个进程发送到另一个进程的消息的最大长度
kernel.shmmax 18446744073692774399
# 定义 Linux 进程在其虚拟地址空间中可分配的单个共享内存段的最大字节大小。
kernel.shmall 18446744073692774399
# 定义可用于系统范围的共享内存页面总数。要使用整个主内存kernel.shmall 参数的值应当为主内存大小总计。 最大用户进程
vim /etc/security/limits.conf
* soft nproc 127671
* hard nproc 127671
ulimit -a虚拟内存大小 - vm.max_map_count
限制一个进程可以拥有的VMA(虚拟内存区域)的数量常用于 ES集群。
vim /etc/sysctl.conf
vm.max_map_count655360
sysctl -p
sysctl -a|grep vm.max_map_count调整stack size的大小
Linux系统初始的堆栈大小
vim /etc/security/limits.conf
* soft stack 262140
* hard stack 262140网络相关
调整网络设备积压队列以避免数据包丢弃
vim /etc/sysctl.conf
net.core.netdev_max_backlog 25000TCP TIME_WAIT 连接复用开启
如果短连接并发量较高它所在 netns 中 TIME_WAIT 状态的连接就比较多而 TIME_WAIT 连接默认要等 2MSL 时长才释放长时间占用源端口当这种状态连接数量累积到超过一定量之后可能会导致无法新建连接。
所以建议开启 TIME_WAIT 复用即允许将 TIME_WAIT 连接重新用于新的 TCP 连接:
vim /etc/sysctl.conf
net.ipv4.tcp_tw_reuse1套字节接受和发送缓冲区
vim /etc/sysctl.conf
net.core.rmem_default26214400
net.core.wmem_default26214400
net.core.rmem_max26214400
net.core.wmem_max26214400 TCP 接受和发送缓冲区 最低/默认/最大
vim /etc/sysctl.conf
net.ipv4.tcp_rmem16384 26214400 26214400
net.ipv4.tcp_wmem32768 26214400 26214400TCP窗口大小
vim /etc/sysctl.conf
net.ipv4.tcp_window_scaling1
# TCP 窗口大小缩放调大TCP全连接连接队列的大小
vim /etc/sysctl.conf
net.core.somaxconn65535UDP 接受和发送缓冲区
UDP socket 的发送和接收缓冲区是有上限的如果缓冲区较小高并发环境可能导致缓冲区满而丢包从网络计数可以看出来:
vim /etc/sysctl.conf
net.ipv4.udp_mem374394 26214400 26214400TCP BBR - 高延迟/高丢包网络优化
介绍文章 https://songxwn.com/TCP_BBR/
vim /etc/sysctl.conf
net.core.default_qdiscfq
net.ipv4.tcp_congestion_controlbbr
# 需要内核4.9以上BBRv3 需要安装较新的Xanmod内核。TCP/UDP本地端口新建范围
高并发场景对于 client 来说会使用大量源端口源端口范围从 net.ipv4.ip_local_port_range 这个内核参数中定义的区间随机选取在高并发环境下端口范围小容易导致源端口耗尽使得部分连接异常。通常 Pod 源端口范围默认是 32768-60999建议将其扩大.
vim /etc/sysctl.conf
net.ipv4.ip_local_port_range 15000 64000
# 默认是32768 60999 ,注意不要和已有端口冲突。net.netfilter.nf_conntrack_max 用于控制连接跟踪表的最大大小
.net.netfilter.nf_conntrack_max不是越高越好通常根据内存大小进行设置。 nf_conntrack_max计算公式64位 CONNTRACK_MAX RAMSIZE (inbytes)/16384/2
例如你的机器是一个64GB 64bit的系统那么最合适的值是
CONNTRACK_MAX 6410241024*1024/16384/2 2097152
vim /etc/sysctl.conf
net.netfilter.nf_conntrack_max 1048576
net.netfilter.nf_conntrack_tcp_timeout_close_wait 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait 120
net.netfilter.nf_conntrack_tcp_timeout_time_wait 120
net.netfilter.nf_conntrack_tcp_timeout_established 3600
net.nf_conntrack_max 1048576最终推荐参数
sysctl
cat /etc/sysctl.conf EOF
fs.file-max 9223372036854775807
fs.nr_open 1073741816
kernel.msgmnb 65536
kernel.msgmax 65536
vm.max_map_count655360
net.core.netdev_max_backlog 25000
net.ipv4.tcp_tw_reuse1
net.ipv4.tcp_rmem16384 26214400 26214400
net.ipv4.tcp_wmem32768 26214400 26214400
net.ipv4.tcp_window_scaling1
net.core.somaxconn65535
net.core.rmem_default26214400
net.core.wmem_default26214400
net.core.rmem_max26214400
net.core.wmem_max26214400
net.ipv4.udp_mem374394 26214400 26214400
net.ipv4.ip_local_port_range15000 64000
EOF
# 配置
sysctl -p
# ulimit
cat /etc/security/limits.conf EOF
* soft nofile 1024000
* hard nofile 1024000
* soft nproc 127671
* hard nproc 127671
* soft stack 262140
* hard stack 262140
EOF
# 需要重启系统/进程/重新登录才能生效。参考
https://support.huaweicloud.com/trouble-ecs/ecs_trouble_0324.html
百看不如一练动手测试单机百万连接的保姆级教程
https://support.huaweicloud.com/ecs_faq/ecs_faq_1327.html
https://cloud.tencent.com/document/product/213/46400
https://cloud.tencent.com/document/product/213/57336
https://imroc.cc/kubernetes/best-practices/performance-optimization/network
https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/9/html/managing_monitoring_and_updating_the_kernel/parameters-affecting-performance-of-database-applications_adjusting-kernel-parameters-for-database-servers
https://cloud.google.com/compute/docs/networking/tcp-optimization-for-network-performance-in-gcp-and-hybrid?hlzh-cn
https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/9/html/monitoring_and_managing_system_status_and_performance/tuning-udp-connections_tuning-the-network-performance
https://cloud.google.com/blog/products/gcp/5-steps-to-better-gcp-network-performance