郑州经纬网络做网站吗,行业论坛网站,世界500强企业正威集团生死局,自己做的网站怎么调用百度地图了解更多银河麒麟操作系统全新产品#xff0c;请点击访问
麒麟软件产品专区#xff1a;https://product.kylinos.cn
开发者专区#xff1a;https://developer.kylinos.cn
文档中心#xff1a;https://documentkylinos.cn 服务器环境以及配置 物理机/虚拟机/云/容器 物理…了解更多银河麒麟操作系统全新产品请点击访问
麒麟软件产品专区https://product.kylinos.cn
开发者专区https://developer.kylinos.cn
文档中心https://documentkylinos.cn 服务器环境以及配置 物理机/虚拟机/云/容器 物理机 外网/私有网络/无网络 私有网络 处理器 HUAWEI Kunpeng 920 5220 内存 512 GiB 整机类型/架构 Huawei S920S00 BIOS版本 Huawei Corp. 1.79 08/21/2021 具体操作系统版本 银河麒麟高级服务器操作系统 Kylin Linux Advanced Server V10 (Tercel) V10 (Tercel) 内核版本 4.19.90-23.8.v2101.ky10.aarch64 现象描述
重点系统投产TCP的连接数猛增现在已经到15000个网络连接需要评估下操作系统的瓶颈如何优化可保证业务不会出行例如somaxconnbacklog等问题。
环境分析
nic0和nic1配置mode 4组成bond0。 nic网卡的驱动为mlx5_core网卡的ring buffer为1024。 从sosreport可见当时的tcp连接查看./proc/net/sockstat文件提供了关于Linux系统中套接字使用情况的统计信息。
sockets: used 14462表示系统当前正在使用的套接字总数为14462个。
TCP: inuse 9030 orphan 0 tw 106 alloc 14155 mem 363
inuse 9030表示当前有9030个TCP套接字处于使用状态。
orphan 0孤立的TCP套接字数量为0。孤立套接字是那些没有应用程序引用但仍在TCP协议栈中的套接字。
tw 106表示处于TIME_WAIT状态的TCP套接字数量为106。TIME_WAIT是TCP连接正常关闭后的一个临时状态。
alloc 14155表示已分配的TCP套接字总数为14155个包括所有状态的套接字。
mem 363表示TCP套接字使用的内存量以页为单位这里为363页。 相关建议
1、增加最大文件描述符数每个TCP连接都需要一个文件描述符。可以通过增加系统允许的最大文件描述符数来确保有足够的资源处理大量的连接。
修改 /etc/security/limits.conf 文件增加 nofile 的限制例如 * soft nofile 131072 * hard nofile 131072
2、内核参数优化建议 内核参数 解释 建议 fs.aio-max-nr 这个参数定义了系统能够分配的最大异步 I/O 操作数。这是一个系统范围的限制意味着所有进程的异步 I/O 操作总数不能超过这个值。如果异步 I/O 请求aio的数量达到这个上限进一步的 aio 请求可能会失败或者变为同步操作。 /proc/sys/fs/aio-max-nr 的默认值可能因内核版本和发行版而异但通常是 65536。这个默认值对于大多数系统来说是足够的但对于高负荷的服务器或者大量使用异步 I/O 的应用程序可能需要增加这个值。 如果应用程序大量依赖异步 I/O性能瓶颈或者 aio-nr 接近 aio-max-nr 的情况可以尝试增加 aio-max-nr 的值。一个常见的做法是将其设置为 1048576这是默认值的大约16倍或者更高具体取决于系统和应用需求。 如果无法确认建议设置为 1048576 net.core.somaxconn net.core.somaxconn 是一个 Linux 内核参数它控制了 socket 监听队列的最大长度。这个参数对于网络服务器尤其重要因为它影响了服务器能够接受的等待接受的TCP连接请求的数量。 当一个应用程序调用 listen() 函数时它需要指定一个参数来决定能够排队等待接受的尚未建立连接的客户端数量。net.core.somaxconn 定义了这个队列的最大长度限制。如果应用程序尝试设置比 net.core.somaxconn 更大的值实际的队列长度将被限制在 net.core.somaxconn 的值。 对于需要处理大量并发连接的服务器增加 net.core.somaxconn 的值可以提高服务器的接受新连接的能力。例如对于高并发的 Web 服务器可能需要将其设置到更高的值如 1024 或更高。 增加监听队列长度可能会增加系统对资源的消耗尤其是内存因此在进行调整时需要根据服务器的实际负载和资源情况做出合理的配置。 某些应用程序可能有自己的设置或限制也需要检查并确保应用程序能够充分利用更大的监听队列。 net.ipv4.tcp_max_syn_backlog 指定了系统用于保存半连接状态SYN_RECEIVED的SYN请求队列的最大长度。这个队列存储的是已经接收到SYN包但还未完成三次握手的连接请求。 当系统开启SYN Cookies功能时通过/proc/sys/net/ipv4/tcp_syncookies参数控制系统能够在SYN队列满时仍然接受新的连接请求因为SYN Cookies机制不依赖于维护状态信息。它通过一种特殊的方式计算序列号来避免使用SYN队列。因此当SYN Cookies开启时tcp_max_syn_backlog的设置对系统的行为影响较小。 可以保持原来的2048或者调大为4096。 net.ipv4.ip_local_port_range 此内核参数用于定义本地端口范围。该参数指定了在本地发起的网络连接所使用的可用 端口范围。 TCP/IP 协议使用端口来标识不同的网络应用程序或服务。在客户端发起与服务器的连接时客户端会随机选择一个未被占用的本地端口来发送数据。这个本地端口是临时的仅在连接的生命周期内使用并在连接关闭后释放。 net.ipv4.ip_local_port_range 参数定义了可供系统使用的本地端口范围的起始端口和结束端口。它的默认值通常是从 32768 到 60999。 建议值为 30000 65500。在如在高并发的网络应用中如果可用的本地端口数目较少可能会导致端口耗尽和端口竞争 从而影响应用程序的性能。通过扩大可用的本地端口范围减少端口耗尽的可能性并提高应用程序的并发性能。 net.ipv4.tcp_tw_reuse 此内核参数用于控制 TIME-WAIT 状态的 TCP 连接是否可以被复用。在 TCP 连接正常关闭后套接字会进入 TIME_WAIT 状态通常持续 2 倍的 MSLMaximum Segment Lifetime最大报文段生存时间。这个状态确保了在网络上迷失的最后数据包能被正确处理防止旧连接的数据干扰新连接。 设置 net.ipv4.tcp_tw_reuse 参数为 1启用可以使系统允许在 TIME-WAIT 状态的连接上进行地址重用。这意味着当一个新的连接尝试使用一个已经处于 TIME-WAIT 状态的地址和端口组合时内核可以复用该地址和端口从而允许新连接立即建立而不必等待 TIME-WAIT 状态的连接完全释放。 设置 net.ipv4.tcp_tw_reuse 参数为 0禁用通常默认值则表示不允许地址重用新连接必须等待 TIME-WAIT 状态的连接彻底释放之后才能使用相同的地址和端口组合。 建议值为 1。启用 net.ipv4.tcp_tw_reuse 可以在例如面对大量短暂连接的情况时 提高系统性能。 net.ipv4.tcp_max_tw_buckets 表示系统同时保持TIME_WAIT套接字的最大数量如果超过这个数值TIME_WAIT套接字将立刻被清除并打印警告信息。对于Apache、Nginx等服务器来说可以将其调低一点如改为5000~30000不同业务的服务器也可以给大一点比如LVS、Squid。 此项参数可以控制TIME_WAIT套接字的最大数量避免Squid服务器被大量的TIME_WAIT套接字拖死。 如果系统有大量的 TIME_WAIT 状态连接并且你观察到日志中出现警告说 time wait bucket table overflow这表明当前的 tcp_max_tw_buckets 值过小。这时可以考虑增加该值。 建议设置为32768 或更高。
修改/etc/sysctl.conf文件,而后执行sysctl -p fs.aio-max-nr1048576 net.core.somaxconn1024 net.ipv4.ip_local_port_range30000 65500 # net.ipv4.tcp_tw_reuse默认为1 # net.ipv4.tcp_max_tw_buckets32768当前环境已经是262144可能用户已调整过
3、建议升级最新的SP1内核以消除已知问题使环境更加稳定。
4、网卡调整 ethtool -G nic0 tx 4096 rx 4096 ethtool -G nic1 tx 4096 rx 4096