nginx配置keepalive长连接
nginx之keepalive详解与其配置_keepalive_timeout_恒者走天下的博客-CSDN博客
为什么要有keepalive?
因为每次建立tcp都要建立三次握手,消耗时间较长,所以为了减少tcp建立连接需要的时间,就可以设置keep_alive长连接。
nginx中keep_alive对客户端的配置
keepalived_disable 禁用某些浏览器
keepalive_request:在我们的tcp连接中并不是等一个请求处理完成后再继续下一个请求,而是进行异步请求,也就是说一个tcp连接可以进行很多个请求。这个参数默认1000,已经完全够用了。
send_request:tcp建立连接后,服务端在准备数据过程中的时间,如果超过设定的时间,则断开连接。
keepalive_timeout:tcp连接过程超过这个设定的时间,则断开连接。
keepalive_time:tcp连接最长时间。(不能让客户端无限复用tcp连接)

nginx对上游后端服务的keepalive
配置目的:在nginx与上有服务器连接的时候,通过配置keepalive达到连接复用,提高传输效率。
在upstream服务器列表中可配置的参数:
keepalive:可支持线程个数
keepalive_requests: 每个线程可以并发多少TCP连接数
keepalive_timeout:连接保留时间
在server中配置的参数:
proxy_http_version:1.1; 设置http版本,默认情况下是http1.0版本像后端服务发起请求,1.0发起每次请求后会关闭连接,下次发起请求后会再次建立连接,消耗时间。
proxy_set_header Connection ""; 由nginx向后端服务器发送请求时,Connection参数默认是close关闭状态,那么就不会和后端服务器建立长连接keepalive,这个参数意思是将nginx发送到后端的header的Connection参数设置成空或者设置成keepalive,那么就支持keepalive长连接(http1.1默认支持长连接)。
用ab压力测试工具对nginx的keepalive参数调优前后性能进行对比
安装ab压力测试工具
yum install httpd-tools -y
ab工具直接对nginx服务器进行压力测试
1.先对后端服务器直接进行压力测试
-n:请求数
-c:并发数
ab -n 10000 -c 30 http://192.168.44.120/
Transfer rate:吞吐量速率,每秒下载速率
Requests per second(qps): 每秒并发量


2.对nginx代理服务器进行ab压力测试(不加keepalive长连接配置)
可以看到经过nginx代理后,吞吐量和qps并发量都大幅度下降。这是因为经过代理后nginx需要再与后端服务器进行数据传输,而且没有加长连接配置,所以性能下降。

3.对nginx代理服务器进行ab压力测试(添加keepalive长连接配置)
添加配置

观察效果:
并发量和吞吐量都有提升,响应延迟下降。证明keepalive配置有对请求效率进行有效的优化。

用ab压力测试工具对nginx的keepalive参数调优前后性能进行对比(后端是tomcat)
用ab直连测试tomcat,性能居中
用ab加nginx(无keepalive)代理测试tomcat,性能比直连稍低
用ab加nginx(keepalive)代理测试tomcat,性能比直连大幅提高
结论:所以再tomcat前加nginx代理绝对不仅仅是为了做动静分离和负载均衡,也是为了keepalive做性能优化提升并发量。
注:
有一些特殊的场景比如客户端浏览器不支持keepalive,或者只是通过暴露tomcat接口进行访问的形式可以通过nginx添加代理keepalive进行调优,一般的浏览器是带有keepalive的,所以一般也不需要通过nginx去做tomcat的keepalive性能调优
相关文章:
nginx配置keepalive长连接
nginx之keepalive详解与其配置_keepalive_timeout_恒者走天下的博客-CSDN博客 为什么要有keepalive? 因为每次建立tcp都要建立三次握手,消耗时间较长,所以为了减少tcp建立连接需要的时间,就可以设置keep_alive长连接。 nginx中keep_alive对…...
Thread.enumerate方法
Thread.enumerate方法的作用是将当前线程所对应的的线程组包含的所有线程放入一个数组 参见源码注释 /*** Copies into the specified array every active thread in the current* threads thread group and its subgroups. This method simply* invokes the {@link java.lan…...
* 号靠近数据类型,和靠近变量名, 号靠近数据类型,和靠近变量名,有什么区别
文章目录 一、int* age 和 int *age,* 号靠近数据类型,和靠近变量名,有什么区别:1. int* age:2. int *age: 二、int& age 和 int &age,& 号靠近数据类型,和靠近变量名,有什么区别&a…...
为了做好农业,拼多多请来顶尖农业专家当独立董事
8月29日,拼多多发布截至6月30日的2023年第二季度业绩报告。财报显示,拼多多集团今年第二季度收入为523亿元,同比增长66%,远超市场预期。 财报发布的同时,拼多多还宣布,其董事会已聘任荷兰瓦赫宁根大学终身…...
Linux服务器安装部署MongoDB数据库 – 【无公网IP远程连接】
文章目录 前言1.配置Mongodb源2.安装MongoDB数据库3.局域网连接测试4.安装cpolar内网穿透5.配置公网访问地址6.公网远程连接7.固定连接公网地址8.使用固定公网地址连接 前言 MongoDB是一个基于分布式文件存储的数据库。由 C 语言编写,旨在为 WEB 应用提供可扩展的高…...
Python+PIL+qrcode实现二维码自由—普通二维码+彩色二维码+logo二维码+动态二维码(附完整代码)
有时候我们需要自己制作一个二维码,然后进行打印下来,或者说在二维码中提前写上一段话比如搞笑的话,然后印在衣服上,然后穿出去玩!的🤣 那么今天我们分享一下制作二维码的几种方式: 哎&#x…...
【Spring Data JPA】JPA 常用查询函数
文章目录 前言函数查询表格 前言 函数查询的表格参考了官网的 2.7.3 版本的文档,JPA 的这种函数式查询方法改动不大,如果想知道更多的复杂查询,可以参考这篇文章 【Spring Data JPA】基于 JpaRepository 增删改查 官方文档地址 Spring Data…...
Visual Studio 2022的MFC框架——AfxWinMain全局对象和InitInstance函数
我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Visual Studio 2022下开发工具的MFC框架知识。 在看这篇帖子前,请先看我的另一篇帖子《Visual Studio 2022的MFC框架——应用程序向导》。 当程序调用了CWinApp类的构造…...
【网络】多路转接——poll | epoll
🐱作者:一只大喵咪1201 🐱专栏:《网络》 🔥格言:你只管努力,剩下的交给时间! 书接上文五种IO模型 | select。 poll | epoll 🍧poll🧁认识接口🧁简…...
音视频 ffmpeg命令视频录制(Windows)
先安装dshow软件 Screen Capturer Recorder, 项目地址:https://sourceforge.net/projects/screencapturer/files/ 然后查看可用设备名字:ffmpeg -list_devices true -f dshow -i dummy [dshow 0509d6c0] DirectShow video devices (some ma…...
【拾枝杂谈】从游戏开发的角度来谈谈原神4.0更新
君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,米娜桑们,这里是君兮_,结合最近的学习内容和以后自己的目标,今天又开了杂谈这个新坑,分享一下我在学习游戏开发的成长和自己的游戏理解,当然现在还是一枚…...
QT设置mainwindow的窗口title
QT设置mainwindow的窗口title 在QT程序中,通常会有**aaaa-[bbbbbbb]**这种形式的title,对于刚上手qt的程序员同学,可能会简单的以为修改这种title,就是使用setWindowTitle这个接口,其实只对了一半,这种形式…...
SaaS多租户系统架构设计
前言:多租户是SaaS(Software-as-a-Service)下的一个概念,意思为软件即服务,即通过网络提供软件服务。SaaS平台供应商将应用软件统一部署在自己的服务器上,客户可以根据工作的实际需求,通过互联网…...
Java自定义捕获异常
需求分析 ElectricalCustomerVO electricalCustomerVO new ElectricalCustomerVO(); electricalCustomerVO.setElcNumber(chatRecordsLog.getDeviceNumber()); List<ElectricalCustomerVO> electricalCustomerlist electricalCustomerMapper.selectElectricalCustomer…...
力扣--数组类题目27. 移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 示例 1: 输入:nums [3,2,2,3], val 3 输出:2, nums [2,2] 解释:函数应该返回新的长度 2, 并且 n…...
实际并行workers数量不等于postgresql.conf中设置的max_parallel_workers_per_gather数量
1 前言 本文件的源码来自PostgreSQL 14.5,其它版本略有不同 PostgreSQL的并行workers是由compute_parallel_worker函数决定的,compute_parallel_worker是估算扫描所需的并行工作线程数,并不是您在postgresql.conf中设置的max_parallel_work…...
java定位问题工具
一、使用 JDK 自带工具查看 JVM 情况 在我的机器上运行 ls 命令,可以看到 JDK 8 提供了非常多的工具或程序: 接下来,我会与你介绍些常用的监控工具。你也可以先通过下面这张图了解下各种工具的基本作用: 为了测试这些工具&#x…...
【Java】基础入门 (十六)--- 异常
1.异常 1.1 异常概述 异常是指程序在运行过程中出现的非正常的情况,如用户输入错误、除数为零、文件不存在、数组下标越界等。由于异常情况再程序运行过程中是难以避免的,一个良好的应用程序除了满足基本功能要求外,还应具备预见并处理可能发…...
[javaWeb]Socket网络编程
网络编程:写一个应用程序,让这个程序可以使用网络通信。这里就需要调用传输层提供的 api。 Socket套接字 传输层提供协议,主要是两个: UDP和TCP 提供了两套不同的 api,这api也叫做socket api。 UDP和 TCP 特点对比: UDP: 无连…...
<MySon car=“宝马“ :money=“money“></MySon>有没有冒号
为什么car"宝马"没有: 但是 :money"money"就有: <script setup> import {ref} from vue import MySon from /components/MySon.vueconst money ref(100) </script><template><h3>father</h3><My…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
