各位大神,我的nginx会通过proxy_pass去调tomcat,但是tomcat会间歇性抽风(fullgc)导致超时,7-8秒吧
我想了一个办法就是请求第一次的时候设置一个超时时间,比如说1s,如果超时了,就在请求一次(换一台机器)
然后我就有了下面这个nginx配置.(下面是用flask的sleep模拟tomcat的fullgc)
upstream up {
server 127.0.0.1:8088;
server 127.0.0.1:8089;
}
server {
listen 8087;
server_name localhost;
access_log logs/host.access.log main;
location / {
proxy_connect_timeout 1s;
proxy_send_timeout 1s;
proxy_read_timeout 1s;
proxy_next_upstream_timeout 1s;
proxy_next_upstream_tries 1;
send_timeout 1s;
proxy_next_upstream timeout error;
proxy_pass http://up;
}
}
8088和8089的服务是我用写的一个mock服务
8088会直接睡秒2s,导致nginx超时
8089会直接返回一个"hello world",200
我的期望是
当我用命令行 `curl`反复请求8087的时候,会始终返回 "hello world",虽然有些请求比较快,有些请求比较慢(1s多,因为经过了一次超时请求之后重新进行的请求)
但是结果却并不是这样
当请求超过1s后,8087他就直接返回 504错误了
通过查看nginx后台日志:
连续打印了3条超时记录:
但是8088(sleep的那个服务,)仅仅只收到了一个请求(有些小异常,用flask写的)
然后我用wireshark抓包发现
求助各位大神?
我的配置哪里有问题吗??
这里可能提提供了些无关信息,如果没用可以忽略哈~
如过有其他好的处理tomcat fullgc超时问题的,也非常感谢啊~
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/199394
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.