关于Nginx,我犯了一个傻逼的错误



测试环境上线新功能,在测试的时候有规律的发现页面加载数据巨慢,查看网络请求,发现后端请求时间超长,吃精的达到了5秒+++以上。这种问题还频繁出现,遥想开发的时候并没有出现过这种问题。

一开始以为后端数据库查询的问题,毕竟关联了好几张表,把SQL拷贝出来执行了一下,然而也就几十毫秒而已,不死心又在后台打印了一下执行时间,一切正常。

又一想是不是拦截器中相关校验的问题,再一次证明我的想法是错误的。

既然后端没问题,那么问题可能会出现在代理服务器上,测试环境架设了Nginx代理服务。检查了一下配置文件,卧槽!!!果然是自己给自己挖下的坑,之前测试负载均衡的时候启动了两个服务,如下:

upstream backserver {
    server 192.168.1.180:8091;
    server 192.168.1.190:8091;
}

然鹅,测试完之后把其中一个服务给掐断了。

那么为什么是偶尔出现呢?步调还这么一致。这就要撩一下Nginx负载均衡检查模块中的max_failsfail_timeout这两个参数了,默认情况下:

max_fails=1 fail_timeout=10s

翻译过来就是:在单位周期为fail_timeout设置的时间中达到max_fails次数,在这个周期次数内,如果后端同一个节点不可用,那么接将把节点标记为不可用,并等待下一个周期再一次去请求,判断是否连接是否成功。如果成功,将恢复之前的轮询方式,如果不可用将在下一个周期再试一次。

把掐断的服务地址注释掉,重启下Nginx就可以了。

切记,生产中一定要搭配服务运行监控通知套件,以便第一时间发现并处理问题。

爪哇笔记

作者: 小柒

出处: https://blog.52itstyle.vip

分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(345849402@qq.com)咨询。