9.OpenResty系列之10W并发实践

news2025/1/19 17:16:56

下图解决了上文所说的请求过多报错问题

如图所示,系统支持30W请求, 并发2W

1. /etc/sysctl.conf配置如下
vm.swappiness = 0
# 表示开启SYNCookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN>攻击,默认为0,表示关闭
# 此参数是为了防止洪水攻击的,但对于大并发系统,要禁用此设置
net.ipv4.tcp_syncookies = 1
# 在 CentOS 8 中,net.ipv4.tcp_tw_reuse 和 net.ipv4.tcp_tw_recycle 参数已被移除>。相反,CentOS 8 使用了新的 TCP 栈实现,其中 TIME-WAIT sockets 的快速回收是默认>启用的
# 表示开启重用。允许将TIME-WAITsockets重新用于新的TCP连接,默认为0,表示关闭
#net.ipv4.tcp_tw_reuse = 1
# 表示开启TCP连接中TIME-WAITsockets的快速回收,默认为0,表示关闭
#net.ipv4.tcp_tw_recycle = 1
# 修改系統默认的TIMEOUT 时间
net.ipv4.tcp_fin_timeout = 30
# 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分
net.ipv4.tcp_keepalive_time = 1200
# 表示用于向外连接的端口范围。缺省情况下很小,改为1024到65535
net.ipv4.ip_local_port_range = 1024 65535
# 表示SYN队列的长度,默认为1024,加大队列长度为65535,可以容纳更多等待连接的网络连接数
net.ipv4.tcp_max_syn_backlog = 365535
# 表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息。默认为180000,改为5000。此项参数可以控制TIME_WAIT的最大数量,只要>超出了
net.ipv4.tcp_max_tw_buckets = 380000
# 每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的
最大数目。
net.core.netdev_max_backlog = 332768
# 例如web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值
net.core.somaxconn = 300000
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
# 最大socket读buffer,可参考的优化值:873200
net.core.rmem_max = 16777216
# 最大socket写buffer,可参考的优化值:873200
net.core.wmem_max = 16777216
# 时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳>能够让内核接受这种“异常”的数据包。这里需要将其关掉
net.ipv4.tcp_timestamps = 0
# 为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是>所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量
net.ipv4.tcp_synack_retries = 2
# 在内核放弃建立连接之前发送SYN包的数量
net.ipv4.tcp_syn_retries = 2
# TCP写buffer,可参考的优化值:8192 436600 873200
net.ipv4.tcp_wmem = 786432 1048576 1572864
# TCP读buffer,可参考的优化值:32768 436600 873200
net.ipv4.tcp_rmem = 786432 1048576 1572864
# 同样有3个值,意思是:
# net.ipv4.tcp_mem[0]:低于此值,TCP没有内存压力。
# net.ipv4.tcp_mem[1]:在此值下,进入内存压力阶段。
# net.ipv4.tcp_mem[2]:高于此值,TCP拒绝分配socket
# 上述内存单位是页,而不是字节。可参考的优化值是:786432 1048576 1572864
# 系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上
net.ipv4.tcp_max_orphans = 3276800
# 如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60秒。2.2 内核的通常值是180秒,你可>以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB服务器,也有因为大量的死>套接字而内存溢出的风险,FIN-WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能吃掉1.5K内存,但是它们的生存期长些。
net.ipv4.tcp_fin_timeout = 30
2. nginx.conf配置如下
worker_processes  15;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  30000;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    # 如果连接超时发生在客户端发送请求到 OpenResty 时,你可以尝试增加这两个配置>项的值
    #client_body_timeout 60s;
    #client_header_timeout 60s;
    # 静态页面无需开启长连接
    keepalive_timeout  0;
    #keepalive_timeout  65;
    # 设置与后端服务器建立连接的超时时间
    #proxy_connect_timeout 5s;
    # 设置向后端服务器发送请求的超时时间
    #proxy_send_timeout 10s;
    # 设置从后端服务器接收响应的超时时间
    #proxy_read_timeout 15s;

    #gzip  on;

    server {
        listen       81;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }
}
3. 并发10W压测

我们选用Jmeter压测工具

  • 请求100W次,并发100用户,吞吐量可达4W

  • 请求100W次,并发1000用户,吞吐量可达3.8W

  • 请求100W次,并发1W用户,吞吐量可达3.4W

  • 请求100W次,并发10W用户,吞吐量可达5千,负载20左右

参数配置这块仍有许多待完善地方,望有相关工作实际经验大佬们不吝赐教

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1416243.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

雨云VPS搭建PalWorld服务器,幻兽帕鲁开服联机教程(Windows),0基础保姆级教程

雨云VPS用Windows系统搭建幻兽帕鲁私服,PalWorld开服联机教程,零基础保姆级教程,本教程使用一键脚本来搭建幻兽帕鲁服务端,并讲了如何配置游戏参数,如何更新服务端等。 最近这游戏挺火,很多人想跟朋友联机…

Ps:渐变编辑器

渐变编辑器 Gradient Editor可用于创建和编辑自定义渐变,它提供了详细的控制选项,能够精确地调整渐变的颜色、样式和效果。 提示: 拖动边框或边角可缩放渐变编辑器窗口。 预设 Presets 提供了大量的渐变预设。还可通过右侧按钮新建 New、导入…

台式电脑的ip地址在哪里找

在网络连接方面,IP地址是非常重要的信息,它是用于标识网络设备的唯一地址。对于台式电脑用户来说,了解自己设备的IP地址是非常有必要的,因为它可以帮助解决网络连接问题,进行远程访问和共享文件等功能。本文将指导读者…

go 实现暴力破解数独

一切罪恶的来源是昨晚睡前玩了一把数独,找虐的选了个最难的模式,做了一个多小时才做完,然后就睡不着了..........程序员不能受这委屈,今天咋样也得把这玩意儿破解了 破解思路(暴力破解加深度遍历) 把数独…

STM32 PWM驱动设计

单片机学习! 目录 文章目录 前言 一、PWM驱动配置步骤 二、代码示例及注意事项 2.1 RCC开启时钟 2.2 配置时基单元 2.3 配置输出比较单元 2.4 配置GPIO 2.5 运行控制 三、PWM周期和占空比计算 总结 前言 PWM本质是利用面积等效原理来改变波形的有效值。 一、PWM驱动…

2024最新版Java Development Kit (JDK)安装使用指南

2024最新版Java Development Kit (JDK)安装使用指南 Installation and Configuration Guide of the latest version Java Development Kit (JDK) in 2024 By JacksonML 0. 序言 What is Java? Java is a programming language and computing platform first released by Su…

day23 其他事件(页面加载事件、页面滚动事件)

目录 页面加载事件页面/元素滚动事件页面滚动事件——获取位置 页面加载事件 加载外部资源(如图片、外联CSS和JavaScript等)加载完毕时触发的事件为什么使用: 有时候需要等页面资源全部处理完毕再做一些事老代码喜欢把script写在head中&…

【JavaScript 漫游】专栏介绍

专栏介绍 本专栏旨在记录 JavaScript 核心语法,作为笔者日常学习和工作中的参考手册和代码示例仓库。 内容上力求覆盖 ES5、DOM、BOM 和 ES6 规范的所有内容。对于常用且重要的知识点,应该详细描述并附带有大量的代码示例。对于在工作场景中很少用到的…

12.14 回退流(血干JAVA系列)

回退流 12.14 回退流【例12.67】操作回退流 12.14 回退流 表 12-23 PushbacklnputStream 类的常用方法 表12-24回退流与输入流的对应 【例12.67】操作回退流 package jiaqi;import java.io.ByteArrayInputStream; import java.io.PushbackInputStream;public class demo43…

E5071C 是德科技网络分析仪

181/2461/8938产品概述: E5071C ENA 矢量网络分析仪,9 kHz 至 20 GHz,配有增强型 TDR 测量选件。 E5071C 是大规模无源元器件测试的理想解决方案。 它具有出色的测量性能,有助于提高测试吞吐量,尤其是与 E5092A 多端…

1948-2022年金融许可信息明细数据

1948-2022年金融许可信息明细数据 1、时间:1948-2022年 2、来源:银监会(银监会许可证发布系统) 3、指标:来源表、机构编码、机构名称、所属银行、机构类型、业务范围、机构住所、地理坐标、行政区划代码、所属区县、…

视频调色 -- 达芬奇DaVinci Resolve Studio 18中文

达芬奇DaVinci Resolve Studio 18是一款功能强大的视频后期处理软件,集视频编辑、色彩校正、音频后期制作等多项功能于一身。该软件支持多种轨道编辑和时间线管理,使视频剪辑和处理更加高效。其高精度的色彩校正技术,能够精确地对影片进行校色…

PHP语法

#本来是在学命令执行,所以学了学,后来发现,PHP语法和命令执行的关系好像没有那么大,不如直接学php的一些命令执行函数了。# #但是还是更一下,毕竟还是很多地方都要求掌握php作为脚本语言,所以就学了前面的…

Linux第37步_解决“Boot interface 6 not supported”之问题

在使用USB OTG将“自己移植的固件”烧写到eMMC中时,串口会输出“Boot interface 6 not supported”,发现很多人踩坑,我也一样。 见下图: 解决办法: 1、打开终端 输入“ls回车”,列出当前目录下所有的文件…

自然语言处理:transfomer架构

介绍 transfomer是自然语言处理中的一个重要神经网络结构,算是在传统RNN和LSTM上的一个升级,接下来让我们来看看它有处理语言序列上有哪些特殊之处 模型整体架构 原论文中模型的整体架构如下,接下来我们将层层解析各层的作用和代码实现 该…

docker环境搭建及其安装常用软件

centos安装docker Install Docker Engine on CentOS | Docker Docs 下载docker sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io…

Qt6入门教程 12:QAbstractButton

目录 一.状态 二.信号 三.使用 1.自定义按钮 2.多选 3.互斥 QAbstractButton类实现了一个抽象按钮,并且让它的子类来指定如何处理用户的动作,并指定如何绘制按钮。QAbstractButton类是所有按钮控件的基类。 QAbstractButton提供…

SpringCloud-高级篇(十七)

(1)添加Redis缓存 -缓存预热 前面实现了openResty查询tomcat,但是缓存架构是,先查询Redis,Redis没有在查询tomcat,下面实现Redis的缓存功能了: --appendonly yes 运行的时候基于日志的方式做数…

寒假思维训练计划day16 A. Did We Get Everything Covered?

今天更新一道1月27号晚上div2的C题作为素材,感觉用到了我的构造题总结模型,我总结了一系列的模型和例题。 摘要: Part1 定义"边界贪心法" Part2 题意 Part3 题解 Part4 代码 Part5 思维构造题模型和例题 Part1 边界贪心…

【分布式技术专题】「探索高性能远程通信」基于Netty的分布式通信框架实现(附通信协议和代码)(上)

基于Netty的分布式通信框架实现 前提介绍回顾Dubbo分布式通信框架组成元素程序执行流程消息协议设计实现机制ChannelInboundHandlerAdapter自定义事件处理 ChannelOutboundHandlerAdapter 编(解)码处理器编码过程阶段ChannelOutboundHandlerAdapter序列化实现ChannelOutboundHa…