0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

聊聊在高并发场景下如何优化服务器的性能?

OSC开源社区 来源:冰河技术 2023-03-13 10:16 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

写在前面

最近,有小伙伴在群里提问:Linux系统怎么设置tcp_nodelay参数?也有小伙伴说问我。那今天,我们就来根据这个问题来聊聊在高并发场景下如何优化服务器的性能这个话题。

其实,tcp_nodelay参数并不是在操作系统级别进行配置的,而是在TCP套接字上添加tcp_nodelay参数来关闭粘包算法,以便使数据包能够立即投递出去。tcp_nodelay参数主要是对TCP套接字来说的,那对于服务器硬件,如果要使其能够支撑上百万甚至上千万的并发,我们该如何对其进行优化呢?

操作系统

这里,我使用的操作系统为CentOS 8,我们可以输入如下命令来查看操作系统的版本。

CentOSLinuxrelease8.0.1905(Core)

对于高并发的场景,我们主要还是优化操作系统的网络性能,而操作系统中,有很多关于网络协议的参数,我们对于服务器网络性能的优化,主要是对这些系统参数进行调优,以达到提升我们应用访问性能的目的。

系统参数

在CentOS 操作系统中,我们可以通过如下命令来查看所有的系统参数。

/sbin/sysctl-a

部分输出结果如下所示。

454f3832-bfb6-11ed-bfe3-dac502259ad0.png

这里的参数太多了,大概有一千多个,在高并发场景下,我们不可能对操作系统的所有参数进行调优。我们更多的是关注与网络相关的参数。如果想获得与网络相关的参数,那么,我们首先需要获取操作系统参数的类型,如下命令可以获取操作系统参数的类型。

/sbin/sysctl-a|awk-F"."'{print$1}'|sort-k1|uniq

运行命令输出的结果信息如下所示。

abi
crypto
debug
dev
fs
kernel
net
sunrpc
user
vm
45643f98-bfb6-11ed-bfe3-dac502259ad0.png

其中的net类型就是我们要关注的与网络相关的操作系统参数。我们可以获取net类型下的子类型,如下所示。

/sbin/sysctl-a|grep"^net."|awk-F"[.|]"'{print$2}'|sort-k1|uniq

输出的结果信息如下所示。

bridge
core
ipv4
ipv6
netfilter
nf_conntrack_max
unix
456bf4e0-bfb6-11ed-bfe3-dac502259ad0.png

在Linux操作系统中,这些与网络相关的参数都可以在/etc/sysctl.conf 文件里修改,如果/etc/sysctl.conf 文件中不存在这些参数,我们可以自行在/etc/sysctl.conf 文件中添加这些参数。

在net类型的子类型中,我们需要重点关注的子类型有:core和ipv4。

优化套接字缓冲区

如果服务器的网络套接字缓冲区太小,就会导致应用程序读写多次才能将数据处理完,这会大大影响我们程序的性能。如果网络套接字缓冲区设置的足够大,从一定程度上能够提升我们程序的性能。

我们可以在服务器的命令行输入如下命令,来获取有关服务器套接字缓冲区的信息。

/sbin/sysctl-a|grep"^net."|grep"[r|w|_]mem[_|]"

输出的结果信息如下所示。

net.core.rmem_default=212992
net.core.rmem_max=212992
net.core.wmem_default=212992
net.core.wmem_max=212992
net.ipv4.tcp_mem=435455806287090
net.ipv4.tcp_rmem=4096873806291456
net.ipv4.tcp_wmem=4096163844194304
net.ipv4.udp_mem=87093116125174186
net.ipv4.udp_rmem_min=4096
net.ipv4.udp_wmem_min=4096
45770ad8-bfb6-11ed-bfe3-dac502259ad0.png

其中,带有max、default、min关键字的为分别代表:最大值、默认值和最小值;带有mem、rmem、wmem关键字的分别为:总内存、接收缓冲区内存、发送缓冲区内存。

这里需要注意的是:带有rmem 和 wmem关键字的单位都是“字节”,而带有mem关键字的单位是“页”。“页”是操作系统管理内存的最小单位,在 Linux 系统里,默认一页是 4KB 大小。

如何优化频繁收发大文件

如果在高并发场景下,需要频繁的收发大文件,我们该如何优化服务器的性能呢?

这里,我们可以修改的系统参数如下所示。

net.core.rmem_default
net.core.rmem_max
net.core.wmem_default
net.core.wmem_max
net.ipv4.tcp_mem
net.ipv4.tcp_rmem
net.ipv4.tcp_wmem

这里,我们做个假设,假设系统最大可以给TCP分配 2GB 内存,最小值为 256MB,压力值为 1.5GB。按照一页为 4KB 来计算, tcp_mem 的最小值、压力值、最大值分别是 65536、393216、524288,单位是“页” 。

假如平均每个文件数据包为 512KB,每个套接字读写缓冲区最小可以各容纳 2 个数据包,默认可以各容纳 4 个数据包,最大可以各容纳 10 个数据包,那我们可以算出 tcp_rmem 和 tcp_wmem 的最小值、默认值、最大值分别是 1048576、2097152、5242880,单位是“字节”。而 rmem_default 和 wmem_default 是 2097152,rmem_max 和 wmem_max 是 5242880。

注:后面详细介绍这些数值是如何计算的~~

这里,还需要注意的是:缓冲区超过了 65535,还需要将 net.ipv4.tcp_window_scaling 参数设置为 1。

经过上面的分析后,我们最终得出的系统调优参数如下所示。

net.core.rmem_default=2097152
net.core.rmem_max=5242880
net.core.wmem_default=2097152
net.core.wmem_max=5242880
net.ipv4.tcp_mem=65536393216524288
net.ipv4.tcp_rmem=104857620971525242880
net.ipv4.tcp_wmem=104857620971525242880

优化TCP连接

对计算机网络有一定了解的小伙伴都知道,TCP的连接需要经过“三次握手”和“四次挥手”的,还要经过慢启动、滑动窗口、粘包算法等支持可靠性传输的一系列技术支持。虽然,这些能够保证TCP协议的可靠性,但有时这会影响我们程序的性能。

那么,在高并发场景下,我们该如何优化TCP连接呢?

(1)关闭粘包算法

如果用户对于请求的耗时很敏感,我们就需要在TCP套接字上添加tcp_nodelay参数来关闭粘包算法,以便数据包能够立刻发送出去。此时,我们也可以设置net.ipv4.tcp_syncookies的参数值为1。

(2)避免频繁的创建和回收连接资源

网络连接的创建和回收是非常消耗性能的,我们可以通过关闭空闲的连接、重复利用已经分配的连接资源来优化服务器的性能。重复利用已经分配的连接资源大家其实并不陌生,像:线程池、数据库连接池就是复用了线程和数据库连接。

我们可以通过如下参数来关闭服务器的空闲连接和复用已分配的连接资源。

net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_time=1800

(3)避免重复发送数据包

TCP支持超时重传机制。如果发送方将数据包已经发送给接收方,但发送方并未收到反馈,此时,如果达到设置的时间间隔,就会触发TCP的超时重传机制。为了避免发送成功的数据包再次发送,我们需要将服务器的net.ipv4.tcp_sack参数设置为1。

(4)增大服务器文件描述符数量

在Linux操作系统中,一个网络连接也会占用一个文件描述符,连接越多,占用的文件描述符也就越多。如果文件描述符设置的比较小,也会影响我们服务器的性能。此时,我们就需要增大服务器文件描述符的数量。

例如:fs.file-max = 10240000,表示服务器最多可以打开10240000个文件。

好了,本文结合群内读者的提问进行了一些总结,希望能够给小伙伴们带来实质性的帮助。







审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 操作系统
    +关注

    关注

    37

    文章

    7457

    浏览量

    129731
  • Linux系统
    +关注

    关注

    4

    文章

    618

    浏览量

    30238
  • CentOS
    +关注

    关注

    0

    文章

    85

    浏览量

    14855
  • TCP通信
    +关注

    关注

    0

    文章

    146

    浏览量

    4915

原文标题:高并发场景下如何优化服务器的性能?

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ptp时间同步服务器满足多场景使用,ptp服务器,ptp时钟

    服务器
    jf_27876553
    发布于 :2026年05月13日 18:13:39

    Nginx性能优化应该先改哪些参数

    Nginx 是高性能 HTTP 服务器和反向代理服务器,默认配置适合低流量场景。当 QPS(每秒请求数)达到数千甚至数万时,默认配置会成为性能
    的头像 发表于 04-21 11:40 337次阅读

    带宽服务器大规模数据传输中的优势解析

    影响系统性能的重要因素。 如果服务器带宽不足,就容易出现下载速度慢、视频加载卡顿、数据同步延迟等问题。因此,很多企业开始部署带宽服务器来满足大规模数据传输需求。本文将详细分析
    的头像 发表于 03-11 09:14 527次阅读

    Go 语言并发服务设计与性能调优实战:从万级到百万级并发的演进之路

    10W+ 连接 性能满意度 开发者满意度 89% 微服务采用率 云原生项目中占比 67% 本文将从 并发模型 、 性能优化 、 资源管理
    发表于 02-18 19:19

    电感服务器电源电路的核心应用:稳定、高效、抗干扰的关键支撑

    “通直流、阻交流” 的特性,服务器电源的多个关键模块中发挥不可替代的作用,尤其贴片电感因小型化、集成度优势,成为服务器电源的主流选择。 一、
    发表于 01-24 11:10

    弹性负载均衡:现代 IT 架构的可用与并发基石

    前言在数字化浪潮,互联网服务的访问量呈爆炸式增长,单台服务器早已难以承载海量并发请求。此时,负载均衡(LoadBalancing)技术应运而生,成为
    的头像 发表于 01-20 09:58 348次阅读
    弹性负载均衡:现代 IT 架构的<b class='flag-5'>高</b>可用与<b class='flag-5'>高</b><b class='flag-5'>并发</b>基石

    服务器电源的测试项目有哪些呢?

    服务器电源的应用场景主要为工业级场景,因此服务器电源测试聚焦稳定性、冗余容错、远程管理等关键需求,所以服务器电源的测试项目主要针对的是这些方
    的头像 发表于 12-26 19:26 558次阅读
    <b class='flag-5'>服务器</b>电源的测试项目有哪些呢?

    结合AI算法的边缘计算服务器城市管理场景有什么作用?

    杆塔安家落户,日夜守护城市平安和高效运转。以国内资深安防硬件厂家广东天波的AI边缘计算服务器为例,可以适配云天励飞的AI算法,城市管理场景中发挥大作用:1、井盖异常:边缘计算服务器
    的头像 发表于 10-17 15:31 625次阅读
    结合AI算法的边缘计算<b class='flag-5'>服务器</b>,<b class='flag-5'>在</b>城市管理<b class='flag-5'>场景</b>有什么作用?

    轻量云服务器和云服务器区别:2025年终极选择指南

    资源、稳定计算性能及完整管理权限,支持垂直与水平扩展,适合企业级应用和并发场景。选择取决于业务需求:轻量服务器适用于成本敏感型
    的头像 发表于 09-01 13:58 1642次阅读
    轻量云<b class='flag-5'>服务器</b>和云<b class='flag-5'>服务器</b>区别:2025年终极选择指南

    华纳云:海外服务器负载均衡与可用架构设计

    现代互联网应用中,海外服务器承担着跨境业务、并发请求和实时数据传输的关键角色。单台服务器难以支撑大量
    的头像 发表于 08-28 18:32 848次阅读

    多核服务器的CPU亲和性配置与负载均衡优化

    某大厂的资深架构师小王最近遇到了一个头疼的问题:新采购的双路AMD EPYC 7763(128核心)服务器并发场景
    的头像 发表于 08-27 14:45 1161次阅读

    Nginx并发优化方案

    作为一名在生产环境中摸爬滚打多年的运维工程师,我见过太多因为Nginx配置不当导致的性能瓶颈。今天分享一套完整的Nginx并发优化方案,帮助你的系统从10万QPS突破到百万级别。
    的头像 发表于 08-13 15:51 1327次阅读

    服务器哪里好

    在当今数字化环境中,DDoS攻击已成为企业网站瘫痪、数据泄露的首要威胁。服务器凭借T级流量清洗能力、智能攻击识别系统和冗余网络架构,成为众多企业的“数字防弹衣”。服务器不仅过滤
    的头像 发表于 06-10 10:32 1205次阅读

    通SoC阵列服务器

    通SoC阵列服务器是基于通系统级芯片(SoC)构建的高密度计算解决方案,核心特点为低功耗、算力集成与模块化设计,主要应用于边缘计算和云服务
    的头像 发表于 06-03 07:37 1491次阅读