问题描述:
最近nginx代理服务器在业务繁忙时段,会频繁出现响应超时 甚至 无法建立链接的情况。 导致lvs 频繁的将real server踢掉。
分析:
1、lvs 问题, 在连接real server时会出现丢包。
2、nginx 所在机器的问题,机器为虚拟机, 网卡对数据包接收的支持。
3、nginx 机器上系统内核参数设置问题。
4、nginx 的配置。
5、后台服务器的问题。
问题排查:
1、nginx 所监听的端口为80 端口,在nginx 的配置新加端口 81。 发现在业务繁忙时, 80端口出现服务问题, 81 端口正常。
由此推断,机器网卡没有问题,若网卡问题,则丢包不会只针对80端口。nginx的处理能力没有问题,不是nginx不能处理更多的请求。80 、81 端口的区别就是请求的量的差异。
2、nginx 每秒的请求约为1000,不过系统能及时处理。
3、网卡接收数据包 5000pps。
4、查看连接状态,发现 SYN_RECV 状态的较多,约500。
5、通过tcpdump 抓包发现,部分80端口的tcp请求没有建立成功。在收到client发送的 SYN 包后,服务器没有响应。
综合以上,确定是同时到达80端口的tcp 建立链接的请求过多, 服务器没有及时响应。
问题处理:
1、对于服务器不能及时处理建立链接的请求,可能是系统中队列设置过小。
/proc/sys/net/ipv4/tcp_max_syn_backlog 中的值已经修改, 这个不是系统的瓶颈。
2、nginx监听80端口限制。
经查阅,发现nginx的listen 命令有参数backlog 用来指定队列大小。 而nginx 默认的值为511, 这就验证了SYN_RECV状态到500左右就会出现问题了。
修改nginx 配置, 将backlog 参数改大, 重启nginx 。 一切正常。
最近nginx代理服务器在业务繁忙时段,会频繁出现响应超时 甚至 无法建立链接的情况。 导致lvs 频繁的将real server踢掉。
分析:
1、lvs 问题, 在连接real server时会出现丢包。
2、nginx 所在机器的问题,机器为虚拟机, 网卡对数据包接收的支持。
3、nginx 机器上系统内核参数设置问题。
4、nginx 的配置。
5、后台服务器的问题。
问题排查:
1、nginx 所监听的端口为80 端口,在nginx 的配置新加端口 81。 发现在业务繁忙时, 80端口出现服务问题, 81 端口正常。
由此推断,机器网卡没有问题,若网卡问题,则丢包不会只针对80端口。nginx的处理能力没有问题,不是nginx不能处理更多的请求。80 、81 端口的区别就是请求的量的差异。
2、nginx 每秒的请求约为1000,不过系统能及时处理。
3、网卡接收数据包 5000pps。
4、查看连接状态,发现 SYN_RECV 状态的较多,约500。
5、通过tcpdump 抓包发现,部分80端口的tcp请求没有建立成功。在收到client发送的 SYN 包后,服务器没有响应。
综合以上,确定是同时到达80端口的tcp 建立链接的请求过多, 服务器没有及时响应。
问题处理:
1、对于服务器不能及时处理建立链接的请求,可能是系统中队列设置过小。
/proc/sys/net/ipv4/tcp_max_syn_backlog 中的值已经修改, 这个不是系统的瓶颈。
2、nginx监听80端口限制。
经查阅,发现nginx的listen 命令有参数backlog 用来指定队列大小。 而nginx 默认的值为511, 这就验证了SYN_RECV状态到500左右就会出现问题了。
修改nginx 配置, 将backlog 参数改大, 重启nginx 。 一切正常。