nginx服务器连接数告警

news2024/11/20 20:38:29

序言

    只要系统之间有交互,那么就会有连接数,连接数的告警阈值一般设置个几万,当连接数开始告警之后,怎么来排查呢?

    连接数过多,会消耗cpu,内存,文件句柄等资源,其实也还好,当解决不了的时候,你可以把连接数的阈值调高一点,或许10w才开始告警,或者30w才开始告警也行,只要cpu和内存不告警,其实也没那么紧急。

服务端连接数异常告警排查

    1 查看连接状态

    当nginx充当转发功能的时候,连接数告警应该很正常,特别是在qps很大的情况下,当收到告警之后,一般接下来的操作就是登录上服务,使用netstat或者ss的命令来进行查看。

netstat -tnp|awk '{print $6}'|sort -nr|uniq -c
ss -tap|awk '{print $6}'|sort -nr|uniq -c
注意:在使用ss命令的时候,如果写的命令和netstat一样,
在默认情况下,ss是不会显示time wait的连接状态的,
因为ss认为这种状态不重要

    当命令执行之后,我们就知道占用连接最多的是哪个了,在正常情况下,你会发现TIME-WAIT连接占用的很多,那么接下来就是看下是哪些ip占用的多了。

#查看本地的ip中,哪些ip数量比较多
netstat -tnp|grep -i time|awk '{print $4}'|awk -F ":" '{print $1}'|sort -nr|uniq -c
#查看远端ip中,哪些ip数量比较多
netstat -tnp|grep -i time|awk '{print $5}'|awk -F ":" '{print $1}'|sort -nr|uniq -c

    在当前的场景下,发现是与后端服务连接的time wait比较多,也就是上面的第二条命令显示的都是nginx的upstream的服务器,从而大致可以判断为,nginx与upstream的连接为短连接,未开启长连接配置

    2 查看nginx的配置

    在默认情况下,如果你在upsteam的配置中啥都没写,那么在默认情况下nginx与upstream的连接是属于短连接的。

Syntax:  keepalive connections;
Default:  —
Context:  upstream
The connections parameter sets the maximum number of
 idle keepalive connections to upstream servers 
 that are preserved in the cache of each 
 worker process. When this number is exceeded, 
 the least recently used connections are closed.

    特别需要注意的keepalive的说明中,这个链接参数限制的是空闲的连接(不会限制后upstream的最大连接数),也就是最多保持的空闲连接数,而不是和数据库的一样,连接池总共有多大。

    伴随着keepalive参数设置之后,还有其他的两个参数也可以设置:

Syntax:  keepalive_timeout timeout;
Default:  
keepalive_timeout 60s;
Context:  upstream
Syntax:  keepalive_requests number;
Default:  
keepalive_requests 1000;
Context:  upstream

    在一般的情况下,这两个参数保持默认值就好了,如果并发很大的时候,那么可以将keepalive设置为300,将timeout和requests设置的大一点,这样可以减少连接被释放的次数。

    如果keepalive_timeout设置的很小,那么就会导致连接不停地被释放,被创建,最直接的影响就是会增大请求的rt,消耗nginx的资源,有更高的连接和关闭的开销,并且会影响后端服务器的性能。

    在upstream的长连接需要进行关闭时候,会按照四次挥手进行关闭连接,而且会等连接处理完成之后,再进行关闭,不像有些框架很暴力,到了时间之后,直接关闭,不管请求是否结束。

    3 客户端的长连接

    对于nginx来说,默认情况下就开启了客户端的长连接功能,所以一般只要配置超时时间即可。

Syntax:  keepalive_timeout timeout [header_timeout];
Default:  
keepalive_timeout 75s;
Context:  http, server, location

    需要注意的是,如果客户端的连接都是短连接,而没有长连接,那么就要查看客户端的请求头了,查看客户端的connection头部是否为close,强制要求使用短连接。

    查看客户端使用的协议,是否是http1.0(默认都是短连接)。

    如果未出现上述的情况,那就要检查nginx的配置中,是否将connection头部设置为"",否则不但客户端是短连接,还会影响nginx和upstream之间也是短连接。

    如果客户端发送的connection头部是close,但是nginx设置了connection头部为"",那么其实nginx和后端依旧是长连接。

    如果发现客户端的连接好多time wait怎么办?优化操作系统的内核参数(/etc/sysctl.conf):

net.ipv4.tcp_keepalive_time = 1200 使用tcp探测尽快处理空闲的连接
net.ipv4.tcp_fin_timeout = 30 设置fin wait2等待时间,减少等待关闭连接的时间,尽快释放系统资源
net.ipv4.tcp_max_tw_buckets 200000 控制timewait数量
net.ipv4.tcp_tw_recycle =0 禁用timewait的快速回收,已废弃,防止潜在网络问题
net.ipv4.tcp_tw_reuse = 1 启用timewait状态的连接便于新的连接
net.ipv4.tcp_timestamps = 1 启用tcp时间戳选项,提高网络传输效率,提高tcp连接安全性
net.ipv4.netdev_max_backlog = 262148 允许入队列的数据包的最大数量

    nginx的复杂之处在于又是客户端,又是服务端,在充当客户端的时候,需要设置连接超时参数,在充当服务端的时候,也要设置连接超时参数,并且参数的名字还差不多,只不过是写的位置不一样,有的是在http段中,有的是在upstream段中。

5990647a604503e50d305dccd9c57288.png

    抓包很有意思,但是你要在特定的时间内抓到特定的包,如果qps很大,一不小心磁盘就炸了,还没抓到对应的包。如果是偶发的现象,你去抓包,那就更加痛苦了,慢慢抓吧。

风言风语

     不出现问题的时候,其实没必要优化,因为优化之后,你也不知道效果,只有出了问题,才知道优化的方向对不对。

        看别人的配置弄个长连接,你也弄个长连接,至于能带来什么效果,不清楚不知道,说基础配置的看起来很简单,但是能解决什么问题,好像。。。很少看到。

        有的问题,听别人讲的时候很清楚,但是仔细一思索,然后在用chatgpt查一查,更加迷茫了,再抓个包。。。emmm,疯了,无法解释的问题,除非去看源码了。

        想少一点,人生会简单很多。。。

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

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

相关文章

《算法笔记》总结No.2——模拟

一.简单模拟 考察代码能力,不涉及算法:一类题目怎么说你就怎么做的类型~ 巴音布鲁克比赛,以车队为基准评选冠军。业务要求是:第一行输入正整数N,代表车手的总个数;接下来的N行每行键入两个数字&#xff1a…

【TOOL】ceres学习笔记(二) —— 自定义函数练习

文章目录 一、曲线方程1. 问题描述2. 实现方案 一、曲线方程 1. 问题描述 现有数学模型为 f ( x ) A e x B s i n ( x ) C x D f(x)Ae^xBsin(x)Cx^D f(x)AexBsin(x)CxD ,但不知道 A A A 、 B B B 、 C C C 、 D D D 各参数系数,实验数据中含有噪声…

Windows程序设计课程作业-3(文件并发下载)

目录 目录 1.作业内容 2.作业要求 3.主要思路 1)窗体和组件初始化 2)下载管理器实例化 3)按钮点击事件处理 4)窗体加载事件处理 5)下载消息处理 4.主要难点 1)多线程管理: 2&#xff09…

智能优化算法改进策略之局部搜索算子(六)--进化梯度搜索

1、原理介绍 进化梯度搜索(Evolutionary Gradient Search, EGS)[1]是兼顾进化计算与梯度搜索的一种混合算法,具有较强的局部搜索能力。在每次迭代过程中,EGS方法首先用受进化启发的形式估计梯度方向,然后以最陡下降的方式执行实际的迭代步骤&…

【JavaSE ⑧】P219 ~ 225 Date类‘’DateFormat类转化Date和字符串;Calendar类获得日历中某值,修改日历,日历转日期

目录 日期时间类1 Date类概述常用方法 2DateFormat类构造方法格式规则常用方法parse方法format方法 3 Calendar类概念获取方式常用方法get/set方法add方法getTime方法 ● 练习1.判断Date不同参数构造的输出2. 用日期时间相关的API,计算一个人已经出生了多少天。3. 获…

【Java】已解决java.lang.NoSuchMethodException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.lang.NoSuchMethodException异常 在Java编程中,java.lang.NoSuchMethodException是一个常见的运行时异常,它通常表示尝试通过反射调用一个不存在…

Ai调教写作技巧,不会还有人在到处找指令吧!一篇文章带你学会生成爆款文章写作指令

大家好,我是网创有方的站长,今天教大家一个重磅级的ai调价指令。 相信很多朋友们都去到处找过写作指令,包括我之前也是,但是随着运用ai写作的次数越来越多,我也是渐渐地熟悉了ai的调教。那么本文的目的是什么呢&#…

使用obdumper对oceanbase进行备份,指定2881端口

1.安装obdumper (1)下载软件 OceanBase分布式数据库-海量数据 笔笔算数https://www.oceanbase.com/softwarecenter (2)安装软件 参考:https://www.oceanbase.com/docs/common-oceanbase-dumper-loader-100000000062…

C语言标准库

目录 引言 一、C标准库概述 常用标准库函数 字符串处理 数学运算 动态内存分配 标准库的扩展与限制 扩展功能 使用限制 使用自定义库与第三方库 创建自定义库 使用第三方库 表格总结 标准库头文件及功能 常用标准库函数 总结 引言 C标准库是C编程语言的重要组成…

Android studio登录Google账号超时的解决方法

确保自己已经打开了代理(科学上网)在设置-外观与行为-系统设置-HTTP代理 中打开“自动检测代理设置”: 再次重新尝试登录Google账号,登陆成功! 学术会议征稿 想要了解国内主办的覆盖学科最全最广的学术会议&#xff0c…

redis持久化操作【随记】

持久化 Redis它是将数据保存到内存当中,内存里的数据最大特点: 断电易失.保存在内存的数据就没有了.如果如果这些数据还有用,业务使用啥的,不能就让它这么没有了. redis当中提供持久化机制, 说白了,将内存的数据 —-> 写入到磁盘. –> 持久化. 1 rdb方式 redis database,…

帕金森患者饮食指南:科学调养,呵护健康

🌼在医学的广阔领域中,帕金森病作为一种慢性神经系统疾病,除了需要专业的医疗治疗外,日常饮食的调养也显得尤为重要。 今天,就为大家带来一份专为帕金森患者打造的饮食建议,希望能为大家的健康调养提供一些…

泛微E9与金蝶云星空ERP的无缝集成案例详解(包括接口与字段)

业务系统现状 背景介绍 泛微E9和金蝶云星空ERP是两款广泛应用与企业管理的信息系统,分别在移动办公自动化和企业资源计划管理领域占据重要地位。然而企业在使用这些系统时往往面临着信息孤岛和系统孤立的问题,导致数据无法在不系统之间高效流转共享。 当…

微服务——服务治理

目录 1 什么是服务治理?2 为什么需要服务治理?3 服务治理的关键点3.1 服务注册与发现3.2 负载均衡3.3 容错与熔断3.4 服务监控与告警3.5 服务配置管理 4 示例说明5 总结 1 什么是服务治理? 简单来说,服务治理就是对微服务架构中的…

Java:113-Spring Data JPA详解

Spring Data JPA详解 Spring Data Jpa 是应用于Dao层的⼀个框架,简化数据库开发的,作用和Mybatis框架⼀样,但是在使用方式和底层机制是有所不同的,最明显的⼀个特点,Spring Data Jpa 开发Dao的时候,很多场景…

气膜建筑:持久耐用的建筑选择—轻空间

随着科技的发展,气膜建筑以其快速施工、节能环保和灵活多用的特点,正在各个领域获得越来越多的应用。然而,许多人对气膜建筑的耐用程度仍存有疑虑。本文将从气膜建筑的材料、结构设计和维护等方面,深入探讨气膜建筑的耐用性&#…

【Android WebView】WebView基础

一、简介 WebView是一个基于webkit引擎、展现web页面的控件。Android的Webview在低版本和高版本采用了不同的webkit版本内核,4.4后直接使用了Chrome。 二、重要类 以WebView类为基础,WebSettings、WebViewClient、WebChromeClient为辅助共同完成安卓段加…

阿里云,大周末彻底要爆!

大家好,我是肉哥,熟悉我的人都知道,每年6.18我都会带领大家薅阿里云的羊毛,今年也不例外,作为程序员搞台ECS,做个项目满满的成就感!阿里内部小伙伴透漏,今年的618活动优惠力度更是拉…

FlinkCDC pipeline模式 mysql-to-paimon.yaml

flinkcdc 需要引入: source端: flink-cdc-pipeline-connector-mysql-xxx.jar、mysql-connector-java-xxx.jar、 sink端: flink-cdc-pipeline-connector-paimon-xxx.jar flinkcdc官方提供connect包下载地址,pipeline模式提交作业和…

成章数据库安装体验

对标Redis的国产数据库 一位来自国产数据库的朋友想请我试用一下他们的产品。并且直言早期问题比较多,还请多多包涵。一般对于这种比较客观和友好的我都愿意试试。对于怼天怼地吊打谁的我个人就不尝试了。 他们中文名字叫“成章数据库“我就尝试从一个不了解产品的…