林子大了什么鸟都有,程序猿做久了什么 bug 都有。
bug 描述
- 出现在 excel 导入的时候
- 线上有问题,本地不可重现
- 数据量少的时候没问题,excel 基本超过 1500 行就出现问题
- 查看日志
解决
- 看日志,应该是失去客户端连接。猜测应该是导入操作的 http 请求超时。
- 在导入方法添加日志,发现后台导入逻辑还在执行时候 ajax 已经返回超时了。猜测导入操作的 ajax 时长设置有问题。
- 查看代码,导入操作 $.ajax({})提交,设置 timeout:0,测试,依然超时。后台使用 springboot+easypoi,猜测 springboot 有设置 http 超时时长。
- 修改 springboot 配置_server.connection-timeout=120000_为两分钟,测试,依然超时,但是发现一个有趣的地方,每次都是到 1 分钟时候超时,因此问题肯定不在以上两个地方
- 全局搜 60、1min 等无果
- 再对比本地和线上环境,本地 IDE 运行,线上多个服务通过 fegin 相互调用,最终通过 nginx 代理到外网,对,nginx 代理
- 修改 nginx 配置如下,问题解决
location /guanli {
root html;
index index.html index.htm;
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_send_timeout 1200s;
# nginx接收upstream server数据超时, 默认60s, 如果连续的60s内没有收到1个字节, 连接关闭
proxy_read_timeout 1200s;
# nginx与upstream server的连接超时时间
proxy_connect_timeout 1200s;
# 发送数据至客户端超时, 默认60s, 如果连续的60s内客户端没有收到1个字节, 连接关闭
send_timeout 1200s;
proxy_pass http://adminService;
}
ps:
- 可能有童鞋提出导入时间太长,这个也作为优化的一个角度,可是数据再多的时候,也可能 2 分钟都不够~~~
- nginx 配置中文网
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于