首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >nginx服务器连接数告警

nginx服务器连接数告警

作者头像
SRE运维实践
发布于 2024-07-12 08:31:31
发布于 2024-07-12 08:31:31
39000
代码可运行
举报
文章被收录于专栏:SRE运维实践SRE运维实践
运行总次数:0
代码可运行

序言

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

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

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

1 查看连接状态

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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占用的多了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#查看本地的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的连接是属于短连接的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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参数设置之后,还有其他的两个参数也可以设置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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来说,默认情况下就开启了客户端的长连接功能,所以一般只要配置超时时间即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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段中。

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

风言风语

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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SRE运维实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Slow ReadProcessor&Error Slow BlockReceiver错误日志分析
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 1.总结 ---- "Slow ReadProcessor" 和"Slow BlockReceiver"往往是因为集群负载比较高或者某些节点不健康导致的,本文主要是帮助你确认是因为集群负载高导致的还是因为某些节点的硬件问题。 2.症状 ---- 1.作业比以前运行的时间变长 2.Job的日志中有以下WARN的
Fayson
2018/07/12
6.4K1
HDFS 线程参数DataXceiver 引发的故障
腾讯云大数据团队服务的某个大客户,hadoop集群超过300台服务器。因为大数据平台承载的业务程序非常多(每天超过5万次任务运行在yarn)、datanode的IO压力很大,在今天下午datanode出现大面积故障。通过日志查找,发现以下信息:
mikealzhou
2019/03/15
14K4
(转载非原创)hadoop源码_hdfs启动流程_2_DataNode _
执行start-dfs.sh脚本后,集群是如何启动的? 本文阅读并注释了start-dfs脚本,以及datanode的启动主要流程流程源码。
xlj
2021/07/15
1K0
0823-5.15.1-HDFS慢导致Hive查询慢问题分析
CDH集群在业务高峰的时候,偶尔会出现Hive 查询慢的现象,本文通过分析Hive出现查询慢时候的集群状态,查找导致Hive查询慢的原因。
Fayson
2020/12/14
3.6K0
0823-5.15.1-HDFS慢导致Hive查询慢问题分析
大数据之Hadoop企业级生产调优手册(下)
注:演示纠删码和异构存储需要一共 5台虚拟机。尽量拿另外一套集群。提前准备 5台服务器的集群。
王知无-import_bigdata
2021/10/13
6880
HBase案例 | 20000个分区导致HBase集群宕机事故处理
这是几个月前遇到的一次HBase集群宕机事件,今天重新整理下事故分析报告。概况的说是业务方的一个10节点HBase集群支撑百TB级别的数据量,集群region数量达 23000+,最终集群支持不住业务压力,带来了一次惨痛的宕机事件。
大数据技术架构
2019/08/16
2.3K0
Flink写hudi报datanode异常以及解决办法
这几天在使用tpcds数据对hudi 0.12.0写入性能进行压测,发现在数据写入半小时后,即出现异常,并且程序不断重启,任务异常日志如下:
从大数据到人工智能
2023/01/08
2.8K0
hadoop2.7.3源码解析之HA架构分析
在hadoop 1.0的时候,hadoop集群只有一个namenode,一旦namenode挂掉了,整个集群就会不可用,hadoop 的HA机制(High Availability)就是为了解决上述问题而产生的。
大数据技术与应用实战
2020/09/15
1K0
hadoop2.7.3源码解析之HA架构分析
hadoop-hdfs-site.xml配置文件详解
hadoop:hdfs-site.xml配置文件详解 hdfs-site.xml配置文件j介绍 hadoop-hdfs相关的配置信息 hdfs-site.xml配置文件 name value description hadoop.hdfs.configuration.version 1 version of this configuration file dfs.namenode.logging.level info The logging level for dfs namenode. Other
许喜朝
2020/10/27
3.2K0
记一次Hadoop集群数据上传缓慢案例分析
手上管理的其中一个Hadoop集群,承接着大量的数据流量,一直以来运行平稳,最近突然发现集群有时会出现MR作业运行缓慢,put文件至HDFS偶发速度慢的问题,像大数据集群这种问题,有点疑难杂症的味道,本次也是经历了10多个小时的定位才真正把问题解决。
Lu说
2022/06/07
1.5K0
记一次Hadoop集群数据上传缓慢案例分析
hbase_异常_03_java.io.EOFException: Premature EOF: no length prefix available
更改了hadoop的配置文件:core-site.xml  和   mapred-site.xml  之后,重启hadoop 和 hbase 之后,发现hbase日志中抛出了如下异常:
shirayner
2018/08/10
4K0
《快学BigData》--Hadoop总结(D)(37)
Hadoop总结 - - - - - - - - - - - - - - - - - - - - - - - - - - - - 210
小徐
2019/08/05
6010
《快学BigData》--Hadoop总结(D)(37)
hadoop几个问题
海量的数据无论是存储还是计算,总是要保证其架构的高可用,数据仓库的构建是一个合的过程,而微服务又是一个分的过程,天下大势,分分合合。
SRE运维实践
2021/03/04
2.1K0
hadoop几个问题
【最全的大数据面试系列】Hadoop面试题大全(一)
1)client 客户端发送上传请求,通过 RPC 与 namenode 建立通信,namenode 检查该用户是否有上传权限,以及上传的文件是否在 hdfs 对应的目录下重名,如果这两者有任意一个不满足,则直接报错,如果两者都满足,则返回给客户端一个可以上传的信息
大数据小禅
2021/12/14
4950
Hadoop NameNode、DataNode热迁移方案
1、在namenode01上,添加退役节点的IP到黑名单,/usr/local/hadoop-2.6.3/etc/hadoop/dfs.exclude文件添加如下需要下线的服务器主机名称:
九州暮云
2019/08/21
2.4K0
Hadoop NameNode、DataNode热迁移方案
Hadoop-2.8.0分布式安装手册
10.12.154.79: Error: JAVA_HOME is not set and could not be found.
一见
2018/08/02
3.3K0
【万字长文】HDFS最全知识点整理(建议收藏)
1)跟NN通信查询元数据(block所在的DN的节点),找到文件块所在的DN的服务器。2)挑选一台DN(就近原则,然后随机)服务器,请求建立socket流。3)DN开始发送数据(从磁盘里读取数据放入流,一packet为单位做校验) 4)客户端以packet为单位接收,现在本地缓存,然后写入目标文件中,后面的block块就相当于append到前面的block块,最后合成最终需要的文件。
857技术社区
2022/05/17
3.3K0
【万字长文】HDFS最全知识点整理(建议收藏)
CDH性能优化(参数配置)
1.dfs.block.size HDFS中的数据block大小,默认是64M,对于较大集群,可以设置为128或264M
Maynor
2022/05/10
1.8K0
HDFS最基础使用
随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。
ha_lydms
2023/10/04
3540
HDFS最基础使用
Hadoop HDFS-监控(monitor)
作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
运维小路
2025/07/31
950
Hadoop HDFS-监控(monitor)
相关推荐
Slow ReadProcessor&Error Slow BlockReceiver错误日志分析
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档