当前位置:首页 > 技术文章 > 正文内容

容器中Nginx高并发参数调优实战 nginx并发量过高怎么处理

arlanguage5个月前 (12-15)技术文章67

在容器化的微服务架构中,Nginx作为反向代理和负载均衡器,常常需要承担高并发访问的压力。当并发连接数超过Nginx可处理的上限时,就会出现新连接被丢弃的情况。本文将详细介绍如何发现和定位这个问题,并通过调整内核参数和Nginx配置来解决。


一、问题现象

某Web服务在高并发场景下,偶尔会出现部分请求无响应的情况。经过初步排查,后端服务器运行正常,猜测可能是Nginx无法及时处理新连接请求导致的。

$ netstat -s | grep -E 'overflow|drop'
    12778639 times the listen queue of a socket overflowed
    12647895 SYNs to LISTEN sockets dropped
全连接队列满了:xxx times the listen queue of a socket overflowed
半连接队列满了:xxx SYNs to LISTEN sockets dropped
    


$ ss -lnt
State      Recv-Q Send-Q Local Address:Port                Peer Address:Port
LISTEN     129    128                *:80                             *:*
当 Recv-Q 的值比 Send-Q 大 1 时表明 accept queue 溢出了,如果再收到 SYN 包就会丢弃掉。  
    


$ cat /proc/sys/net/ipv4/tcp_syncookies
1
syncookies 是为了防止 SYN Flood 攻击 (一种常见的 DDoS 方式),
攻击原理就是 client 不断发 SYN 包但不回最后的 ACK,
填满 server 的 syn queue 从而无法建立新连接,导致 server 拒绝服务。


二、确认问题原因

1.抓包分析通过tcpdump抓取Nginx所在节点的网络数据包,发现存在大量TCP连接在SYN_RECV状态下被主动重置的现象。这种情况一般说明,Nginx在接收到SYN包后,没有足够的资源分配给新连接,导致Accept Queue满后的新连接被丢弃。

2.Accept Queue 慢导致丢包Linux中的Accept Queue大小,由内核参数net.core.somaxconn和Nginx配置的backlog共同决定。当新连接到达速率超过Accept Queue的处理速度时,就会出现丢包。


三、调优Accept Queue大小

1.调整内核参数net.core.somaxconnsomaxconn参数限制了系统范围内所有监听Socket队列的最大长度。可以通过如下命令持久修改:

echo 'net.core.somaxconn=65535' >> /etc/sysctl.conf
sysctl -p


2.调整Nginx backlog大小Nginx中的backlog参数限制了每个监听Socket队列的最大长度。编辑nginx.conf,增大backlog值:

events {
    worker_connections 65535;  
    multi_accept on;
}  

http {
    ...
    server {
        listen 80 backlog=8192;
        ...
    }
}


3.重载Nginx使配置生效

nginx -s reload


四、调优效果验证

调整参数后,通过监控Nginx活跃连接数,在高并发场景下未再出现丢包和无响应的情况。


五、其他可选调优

除了增大Accept Queue长度,还可以考虑以下调优手段:

1.增加Nginx Worker进程数

2.开启多核负载均衡

3.优化上游服务性能

4.缓存静态资源

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/199.html

标签: nginx访问慢
分享给朋友:

“容器中Nginx高并发参数调优实战 nginx并发量过高怎么处理” 的相关文章

Nginx 全面攻略:动静分离、压缩、缓存、黑白名单、跨域、高可用

Nginx 作为一款高性能的 HTTP 服务器和反向代理服务器,被广泛应用于各类互联网项目中。它不仅能够提供静态文件服务,还支持动静分离、压缩、缓存、黑白名单、跨域、高可用等多种高级功能。本文将带你全面了解和掌握 Nginx 的这些强大功能。一、动静分离动静分离是指将动态请求与静态资源请求分离开来,...

压测nginx出现的问题分析

压测nginx出现no live upstreams while connecting to upstream的问题分析基础环境版本信息Centos 7.1nginx version: openresty/1.13.6.2nginx配置信息stream {   ...

nginx支持跨域的方法 nginx配置支持跨域

在nginx的配置文件中添加允许跨域的响应头。参考nginx官方文档,添加响应头的方法如下:在conf文件的server作用域中添加如下响应头:server { listen 80; # 其他配置... # 允许跨域 add_header Access-Control-Allow-...

Java基础教程:k8s快速入门 k8s jmeter

介绍容器化部署随着Docker技术的流行,对项目的容器化部署方式越来越流行,容器化部署的优点如下:可以保证每个容器拥有自己的文件系统、CPU、内存、进程空间等运行应用程序所需要的资源都被容器包装,并和底层基础架构解耦容器化的应用程序可以跨云服务商、跨Linux操作系统发行版进行部署虽然容器化部署可以...

学习Java需要掌握哪些技能?

想要找到Java工程师的工作,必须具备Java岗位要求的相关技能,应该有夯实的Java基础知识,熟练掌握、JavaSE开发、JavaWEB与数据库高级编程、企业级框架、大型企业级项目实战等相关的开发技能。01 Java基础知识Java入门、变量,基本表达式、流程分支、单层循环、双层循环、数组入门等。...

Nginx 最全操作——nginx常用命令(3)

上一篇文章我们设置了nginx的配置,这里简单介绍一下nginx的常用命令。几个常用的命令:nginx -s reload # 向主进程发送信号,重新加载配置文件,热重启 nginx -s reopen # 重启 Nginx nginx -s stop # 快速关闭 nginx -s qu...